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 ti piacerebbe 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 in errore di compilazione.
-
Scrivi un'implementazione di una funzione fittizia:
int add(int a, int b) { return 5; }
Risultato:
test1
passaggi. -
Aggiungi un altro test case:
// test2 -- notice the wrong expected value (should be 11)! Assert.assertEquals(12, add(5, 6));
Risultato:
test2
fallisce,test1
ancora passa. -
Scrivi un'implementazione reale:
int add(int a, int b) { return a + b; }
Risultato:
test1
continua a passare,test2
non riesce ancora (poiché11 != 12
).
In questo caso particolare: sarebbe meglio:
- correggi
test2
, e vedi che ora passa, o - elimina la nuova porzione di implementazione (es. torna al punto 2 sopra), correggi
test2
e lascia fallire, quindi reintroduce l'implementazione corretta (passaggio # 4 sopra).
O esiste un altro modo più intelligente?
Pur comprendendo che il problema di 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):
L'obiettivo di questa domanda è quello che TDD suggerisce in questo caso, non quello che è "la migliore pratica universale" per ottenere buoni codici o test (che potrebbero essere diversi dal modo TDD).