Até que ponto você testou os componentes internos / privados de uma classe / módulo / pacote / etc? Você os testa ou apenas testa a interface para o mundo exterior? Um exemplo desses métodos internos são os privados.
Como exemplo, imagine um analisador de descida recursiva , que possui vários procedimentos internos (funções / métodos) chamados de um procedimento central. A única interface para o mundo externo é o procedimento central, que pega uma string e retorna as informações analisadas. Os outros procedimentos analisam partes diferentes da cadeia e são chamados do procedimento central ou de outros procedimentos.
Naturalmente, você deve testar a interface externa chamando-a com sequências de amostra e comparando-a com a saída analisada à mão. Mas e os outros procedimentos? Você os testaria individualmente para verificar se eles analisam seus substrings corretamente?
Eu posso pensar em alguns argumentos:
Prós :
- Mais testes são sempre melhores e isso pode ajudar a aumentar a cobertura do código
- Alguns componentes internos podem ser difíceis de fornecer entradas específicas (casos extremos, por exemplo) fornecendo entradas para a interface externa
- Teste mais claro. Se um componente interno tiver um bug (corrigido), um caso de teste para esse componente deixará claro que o bug estava naquele componente específico
Contras :
- A refatoração se torna muito dolorosa e demorada. Para alterar qualquer coisa, é necessário reescrever os testes de unidade, mesmo que os usuários da interface externa não sejam afetados.
- Algumas linguagens e estruturas de teste não permitem
Quais são as suas opiniões?