Qual é o melhor curso de ação no TDD se, depois de implementar a lógica corretamente, o teste ainda falhar (porque há um erro no teste)?
Por exemplo, suponha que você gostaria de desenvolver a seguinte função:
int add(int a, int b) {
return a + b;
}
Suponha que o desenvolvamos nas seguintes etapas:
Teste de gravação (nenhuma função ainda):
// test1 Assert.assertEquals(5, add(2, 3));Resultados em erro de compilação.
Escreva uma implementação de função fictícia:
int add(int a, int b) { return 5; }Resultado:
test1passa.Adicione outro caso de teste:
// test2 -- notice the wrong expected value (should be 11)! Assert.assertEquals(12, add(5, 6));Resultado:
test2falha,test1ainda passa.Escreva implementação real:
int add(int a, int b) { return a + b; }Resultado:
test1ainda passa,test2ainda falha (desde11 != 12).
Nesse caso em particular: seria melhor:
- correto
test2e veja que agora passa ou - exclua a nova parte da implementação (ou seja, volte para a etapa 2 acima), corrija
test2e deixe falhar e, em seguida, reintroduza a implementação correta (etapa 4, acima).
Ou existe alguma outra maneira mais inteligente?
Embora eu entenda que o problema de exemplo é bastante trivial, estou interessado no que fazer no caso genérico, que pode ser mais complexo do que a adição de dois números.
EDIT (Em resposta à resposta de @Thomas Junk):
O foco desta pergunta é o que o TDD sugere nesse caso, e não a "melhor prática universal" para obter bons códigos ou testes (que podem ser diferentes do modo TDD).