Dan North hat vorgeschlagen, dass es kein testgesteuertes Design gibt, da das Design nicht wirklich durch Tests ausgetragen wird - dass diese Unit Tests erst Tests werden, wenn die Funktionalität implementiert ist, aber während der Designphase wirklich mit gutem Beispiel gestalten.
Dies ist sinnvoll - Ihre Tests richten eine Reihe von Beispieldaten und Bedingungen ein, mit denen das zu testende System arbeiten wird, und Sie fahren das Design basierend auf diesen Beispielszenarien aus.
Einige der anderen Antworten legen nahe, dass dies auf YAGNI basiert. Dies ist teilweise richtig.
Darüber hinaus gibt es das Problem der Komplexität. Wie oft gesagt wird, geht es beim Programmieren darum, Komplexität zu managen - Dinge in nachvollziehbare Einheiten zu zerlegen.
Wenn Sie 10 Tests schreiben, um Fälle zu decken, in denen param1 null ist, param2 ist null, string1 ist leer, int1 ist negativ und der aktuelle Wochentag ist ein Wochenende, und dann gehen Sie, um das zu implementieren eine Menge Komplexität auf einmal zu jonglieren. Dies eröffnet Platz für die Einführung von Fehlern, und es wird sehr schwierig herauszufinden, warum Tests fehlschlagen.
Auf der anderen Seite, wenn Sie den ersten Test schreiben, um eine leere Zeichenfolge1 abzudecken, müssen Sie kaum über die Implementierung nachdenken. Wenn der Test vorüber ist, geht es weiter zu einem Fall, in dem der aktuelle Tag ein Wochenende ist. Sie sehen sich den vorhandenen Code an und es wird offensichtlich, wohin die Logik gehen soll. Sie führen Tests aus und wenn der erste Test jetzt fehlschlägt, wissen Sie, dass Sie es bei der Implementierung des Wochentags-Dings gebrochen haben. Ich würde sogar empfehlen, dass Sie die Quelle zwischen den Tests festlegen, sodass Sie, wenn Sie etwas kaputt machen, immer wieder in den Status "Übergeben" wechseln und es erneut versuchen können.
Nur ein wenig nach dem anderen zu überprüfen und dann zu überprüfen, dass es funktioniert dramatisch reduziert den Platz für die Einführung von Fehlern, und wenn Ihre Tests nach der Implementierung fehlschlagen haben Sie so wenig Code, dass es sehr einfach ist, den Fehler zu identifizieren Korrigieren Sie es, weil Sie wissen, dass der vorhandene Code bereits ordnungsgemäß funktioniert hat.
+1 für das "Experiment" – k3b