Es bedeutet, dass entweder:
- Sie haben den Produktionscode geschrieben, der die gewünschte Funktion erfüllt, ohne zuvor den Test zu schreiben (eine Verletzung des "religiösen TDD"), oder
- Die Funktion, die Sie benötigen, wird vom Produktionscode bereits erfüllt, und Sie schreiben lediglich einen weiteren Komponententest, um diese Funktion abzudecken.
Die letztere Situation ist häufiger als Sie vielleicht denken. Nehmen wir an, Sie haben als ein völlig unspezifisches und triviales (aber dennoch veranschaulichendes) Beispiel den folgenden Komponententest geschrieben (Pseudocode, weil ich faul bin):
public void TestAddMethod()
{
Assert.IsTrue(Add(2,3) == 5);
}
Denn alles, was Sie wirklich brauchen, ist das Ergebnis von 2 und 3 zusammen.
Ihre Implementierungsmethode wäre:
public int add(int x, int y)
{
return x + y;
}
Angenommen, ich muss jetzt 4 und 6 addieren:
public void TestAddMethod2()
{
Assert.IsTrue(Add(4,6) == 10);
}
Ich muss meine Methode nicht umschreiben, da sie bereits den zweiten Fall abdeckt.
Nehmen wir an, ich habe herausgefunden, dass meine Add-Funktion wirklich eine Zahl mit einer Obergrenze von 100 zurückgeben muss. Ich kann eine neue Methode schreiben, die dies testet:
public void TestAddMethod3()
{
Assert.IsTrue(Add(100,100) == 100);
}
Und dieser Test wird jetzt fehlschlagen. Ich muss jetzt meine Funktion umschreiben
public int add(int x, int y)
{
var a = x + y;
return a > 100 ? 100 : a;
}
es passieren zu lassen.
Der gesunde Menschenverstand schreibt vor, dass wenn
public void TestAddMethod2()
{
Assert.IsTrue(Add(4,6) == 10);
}
Wenn der Test bestanden wird, wird die Methode nicht absichtlich zum Fehlschlagen gebracht, nur damit Sie einen fehlgeschlagenen Test durchführen und neuen Code schreiben können, um den Test zu bestehen.