Was ist die beste Vorgehensweise in TDD, wenn der Test nach korrekter Implementierung immer noch fehlschlägt (weil ein Fehler im Test vorliegt)?
Angenommen, Sie möchten die folgende Funktion entwickeln:
int add(int a, int b) {
return a + b;
}
Angenommen, wir entwickeln es in den folgenden Schritten:
Schreibtest (noch keine Funktion):
// test1 Assert.assertEquals(5, add(2, 3));
Ergibt einen Kompilierungsfehler.
Schreiben Sie eine Dummy-Funktionsimplementierung:
int add(int a, int b) { return 5; }
Ergebnis: bestanden
test1
.Fügen Sie einen weiteren Testfall hinzu:
// test2 -- notice the wrong expected value (should be 11)! Assert.assertEquals(12, add(5, 6));
Ergebnis:
test2
nicht bestanden,test1
noch bestanden.Schreiben Sie eine echte Implementierung:
int add(int a, int b) { return a + b; }
Ergebnis:
test1
noch bestanden,test2
noch nicht bestanden (seit11 != 12
).
In diesem speziellen Fall: Wäre es besser:
- richtig
test2
, und sehen, dass es jetzt passiert, oder - Löschen Sie den neuen Teil der Implementierung (dh gehen Sie zurück zu Schritt 2 oben), korrigieren
test2
Sie ihn und lassen Sie ihn fehlschlagen. Führen Sie dann die korrekte Implementierung wieder ein (Schritt 4 oben).
Oder gibt es einen anderen, klügeren Weg?
Obwohl ich verstehe, dass das Beispielproblem eher trivial ist, interessiert mich, was in dem generischen Fall zu tun ist, der komplexer sein könnte als die Addition von zwei Zahlen.
BEARBEITEN (als Antwort auf die Antwort von @Thomas Junk):
Der Schwerpunkt dieser Frage liegt auf dem, was TDD in einem solchen Fall vorschlägt, und nicht auf der "Universal Best Practice", um guten Code oder Tests zu erzielen (die sich möglicherweise von der TDD-Methode unterscheiden).