Qual è la migliore linea d'azione in TDD se, dopo aver implementato correttamente la logica, il test fallisce ancora (perché c'è un errore nel test)?
Ad esempio, supponiamo che tu voglia sviluppare la seguente funzione:
int add(int a, int b) {
return a + b;
}
Supponiamo di svilupparlo nei seguenti passaggi:
Scrivi test (nessuna funzione ancora):
// test1 Assert.assertEquals(5, add(2, 3));
Risultati nell'errore di compilazione.
Scrivi un'implementazione fittizia della funzione:
int add(int a, int b) { return 5; }
Risultato:
test1
passa.Aggiungi un altro caso di test:
// test2 -- notice the wrong expected value (should be 11)! Assert.assertEquals(12, add(5, 6));
Risultato:
test2
fallisce,test1
passa ancora.Scrivi implementazione reale:
int add(int a, int b) { return a + b; }
Risultato:
test1
passa ancora,test2
continua a fallire (da allora11 != 12
).
In questo caso particolare: sarebbe meglio:
- corretto
test2
e vedere che ora passa, o - eliminare la nuova porzione di implementazione (es. tornare al passaggio 2 sopra), correggere
test2
e lasciarla fallire, quindi reintrodurre l'implementazione corretta (passaggio 4 sopra.).
O c'è un altro modo più intelligente?
Mentre capisco che il problema dell'esempio è piuttosto banale, sono interessato a cosa fare nel caso generico, che potrebbe essere più complesso dell'aggiunta di due numeri.
EDIT (in risposta alla risposta di @Thomas Junk):
Il focus di questa domanda è ciò che TDD suggerisce in questo caso, non quale sia "la migliore pratica universale" per ottenere buoni codici o test (che potrebbero essere diversi dal modo TDD).