Wie kann man beim Erstellen von TDD und beim Schreiben eines Komponententests dem Drang widerstehen, beim Schreiben der ersten Iteration des zu testenden Implementierungscodes zu "schummeln"?
Zum Beispiel:
Lassen Sie mich das Faktorielle einer Zahl berechnen. Ich beginne mit einem Komponententest (mit MSTest), der ungefähr so aussieht:
[TestClass]
public class CalculateFactorialTests
{
[TestMethod]
public void CalculateFactorial_5_input_returns_120()
{
// Arrange
var myMath = new MyMath();
// Act
long output = myMath.CalculateFactorial(5);
// Assert
Assert.AreEqual(120, output);
}
}
Ich CalculateFactorial
führe diesen Code aus und er schlägt fehl, da die Methode nicht einmal existiert. Also, ich schreibe jetzt die erste Iteration des Codes das Verfahren unter Test zu implementieren, das Schreiben des Mindest Code erforderlich , um den Test zu bestehen.
Die Sache ist, ich bin immer wieder versucht, Folgendes zu schreiben:
public class MyMath
{
public long CalculateFactorial(long input)
{
return 120;
}
}
Technisch gesehen ist dies insofern korrekt, als es sich tatsächlich um den Mindestcode handelt, der erforderlich ist, um diesen bestimmten Testdurchlauf durchzuführen (grün zu werden), obwohl dies eindeutig ein "Betrug" ist, da nicht einmal versucht wird , die Funktion zum Berechnen einer Fakultät auszuführen. Natürlich wird der Refactoring-Teil jetzt zu einer Übung zum "Schreiben der richtigen Funktionalität" und nicht zu einem echten Refactoring der Implementierung. Offensichtlich schlägt das Hinzufügen zusätzlicher Tests mit anderen Parametern fehl und erzwingt ein Refactoring, aber Sie müssen mit diesem einen Test beginnen.
Meine Frage ist also, wie Sie das Gleichgewicht zwischen dem Schreiben des Mindestcodes zum Bestehen des Tests und dem Beibehalten des Funktionszustands und dem Erreichen des Ziels erreichen können.