Ich experimentiere mit testgetriebener Entwicklung und habe festgestellt, dass ich häufig in folgende Situationen gerate:
- Ich schreibe Tests für einige Funktionen X. Diese Tests schlagen fehl.
- Beim Versuch, X zu implementieren, sehe ich, dass ich ein Feature Y in einer unteren Ebene meines Codes implementieren muss. So...
- Ich schreibe Tests für Y. Jetzt schlagen beide Tests für X und Y fehl.
Einmal wurden 4 Features in verschiedenen Codeebenen gleichzeitig bearbeitet, und ich verlor den Fokus auf das, was ich gerade tue (zu viele Tests schlagen gleichzeitig fehl).
Ich denke, ich könnte dieses Problem lösen, indem ich mehr Aufwand in die Planung meiner Aufgaben stecke, noch bevor ich anfange, Tests zu schreiben. Aber in einigen Fällen wusste ich nicht, dass ich tiefer gehen muss, weil ich zB die API der unteren Schicht nicht sehr gut kannte.
Was soll ich in solchen Fällen tun? Hat TDD irgendwelche Empfehlungen?
quelle
X
wissen, welchen Teil der AbhängigkeitenX
ich verspotten muss. Ich bin der Meinung, dass dies Teil der Implementierungsdetails ist, die nicht Teil der Tests sein sollten. Andernfalls muss ich möglicherweise die Tests ändern, während die Implementierung überarbeitet wird. Sollte ich mir darüber Sorgen machen?Stubs und Mocks können verwendet werden, um die Funktionalität zu simulieren, die noch nicht geändert / implementiert wurde. Sie können Ihnen auch dabei helfen, die Abhängigkeiten aufzulösen, die diese Art von Kettenreaktion verursachen.
Auf der anderen Seite ist es am besten, nur einen (nicht bestandenen) Test durchzuführen, der die nächste Änderung bewirkt.
Andere Tests, die auf den Code abzielen, der auf neuen Funktionen basiert, können vorübergehend deaktiviert werden, da sie zu diesem Zeitpunkt nicht wirklich relevant sind, d. H. Deaktivieren Sie in Ihrem Fall die Tests für X, bis Sie Y usw. implementieren.
Auf diese Weise können Sie sich nur auf die nächste Änderung konzentrieren, die Sie möchten, denke ich.
quelle
unittest
bereits Test-Skipping hat. Das könnte für mich reichen.Halt
Auf den ersten Blick scheint es hier zwei verschiedene Probleme zu geben:
Sie haben einige Storys und Testszenarien vergessen und erst entdeckt, als Sie mit der Arbeit an einem bestimmten Testszenario begonnen haben, und / oder
Sie tun wirklich Testeinheit und TDD nicht Feature - Tests
Für 1, Halten Sie gehen Sie zurück und aktualisieren Sie die Storys und Testszenarien. Beginnen Sie dann mit einem anderen Szenario.
Halten Sie bei # 2 an und denken Sie daran, dass Sie Funktionen und nicht Einheiten testen. Verwenden Sie daher Mocks, um andere Schnittstellen zu beschönigen und / oder implementieren Sie mehr Code, um den Test zu bestehen, ohne neue Testszenarien hinzuzufügen. Dies setzt voraus, dass Sie keine Testszenarien verpassen, sondern stattdessen - und das ist wirklich üblich - Unit-Tests und TDD zusammenführen.
quelle
Dies ist eine großartige Frage und eine GROSSE Enttäuschung auch für mich bei TDD. Ich glaube, TDD fehlt in diesem Szenario, in dem Sie einfach nicht wissen können, welche Komponenten oder Funktionen auf niedrigerer Ebene Sie benötigen, bis Sie mit der Entwicklung beginnen.
Persönlich fand ich, dass TDD nur funktioniert, wenn Sie genau wissen, was Sie tun müssen und was Sie aufrufen müssen, um eine Funktion auszuführen. Die Entwickler wissen nicht immer alles, bevor wir anfangen. Daher habe ich festgestellt, dass dies der beste Weg für mich ist, um genau die von Ihnen beschriebene Situation zu mildern:
Prototyp
Wenn ich einfache Prototyp-Apps erstelle, um Methoden und Ansätze für ein technisches Problem zu erforschen und zu entdecken, entdecke ich einen Großteil der Vorarbeiten und räume diese Recherche aus dem Weg, bevor ich anfange. Das Entwerfen und Schätzen wird ebenfalls viel einfacher.
Wenn der Prototyp so involviert sein muss, dass er zur Anwendung wird, dann fordere ich Sie dringend auf, das Faule nicht zu tun und anschließend Komponententests für Ihren Prototyp zu erstellen.
Sie sollten zu diesem Zeitpunkt mehr über die API der niedrigeren Ebene wissen und in der Lage sein, die API der niedrigeren Ebene in Ihren Komponenten der höheren Ebene erfolgreich zu verspotten.
quelle
Es hängt davon ab, welche Art von Tests Sie beim TDD durchführen.
Das klassische Modell besteht darin, Komponententests zu schreiben und Mocks oder Stubs zu verwenden, um den Test von den anderen "Einheiten" des Codes zu entkoppeln.
Es gibt viele andere alternative Modelle wie ATDD, bei denen der Test ein voller Stapel oder ein fast voller Stapel ist. In diesem speziellen Fall stellen Ihre Schreibtests, die das erforderliche Programmverhalten bestätigen, keine einzige Codeeinheit dar, sodass Sie keine anderen Tests schreiben würden. Sie würden das Gerät die Rundreise bekommen, um den Test zu erfüllen. Anschließend fügen Sie weitere Tests für andere Funktionen / Verhalten hinzu.
quelle