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:
test1
passa.Adicione outro caso de teste:
// test2 -- notice the wrong expected value (should be 11)! Assert.assertEquals(12, add(5, 6));
Resultado:
test2
falha,test1
ainda passa.Escreva implementação real:
int add(int a, int b) { return a + b; }
Resultado:
test1
ainda passa,test2
ainda falha (desde11 != 12
).
Nesse caso em particular: seria melhor:
- correto
test2
e veja que agora passa ou - exclua a nova parte da implementação (ou seja, volte para a etapa 2 acima), corrija
test2
e 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).