Ich habe meine ersten kleinen Schritte in Unit Testing gemacht und aufgrund eines besseren Verständnisses der Domäne eine Änderung an einem Domänenmodell vorgenommen, das einen Komponententest durchbrochen hat. Das brachte die Frage auf:
Wann ist es zulässig, zuvor arbeitende Komponententests zu ändern?
Ich denke, mir fehlt ein wichtiger Aspekt des Komponententests, wenn ich diese Frage stellen muss ...
Bei "richtiger" TDD ändern Sie zuerst den Test, dann ändern Sie den Code.
Sie haben also nie einen kaputten Test, sondern nur kaputten Code. Sie sollten immer danach streben, in einer Position zu sein, in der die Tests der definitive Ausdruck der korrekten Funktionalität sind und als solche a priori korrekt sind.
Der Punkt eines jeden einzelnen Komponententests ist nicht, dass er niemals bricht, sondern dass er so lange funktioniert, wie auch die Funktion, für die er testet, funktioniert. Auf diese Weise führt eine versehentliche Änderung an einer getesteten Funktion zu einem fehlgeschlagenen Test, den Sie herausfinden, und nicht zu Ihrem Endbenutzer.
Wenn die Funktion absichtlich geändert wird, sollten Sie erwarten, dass einige Tests unterbrochen werden. Wenn Sie dies nicht tun, haben Sie das Feature in der Testsuite nicht ausreichend abgedeckt.
Wenn Sie eine Änderung vornehmen, die Tests unterbricht:
1) Finden Sie zuerst heraus, ob der Test nun unterbrochen ist oder ob Ihre Änderung einen Test durchbrochen hat, den sie nicht haben sollte.
2). Wenn es ersteres ist, repariere den Test. Sonst behebe deine Änderung.
Wenn sich die Anforderungen ändern. Unabhängig davon, ob Sie Ihren Code ändern und dann sehen, welche Tests aus welchen Gründen unterbrochen werden (wie Mitch vorgeschlagen hat) oder Ihre Tests ändern und dann Ihren Code ändern (wie auf Visage angesprochen), werden sich die Tests nur ändern, wenn die Funktionalität angeblich etwas anderes machen.
Jedes Mal, wenn Sie müssen.
Der Punkt ist, Ihre Tests sollten ein genaues Bild davon sein, wie Ihre Software funktionieren soll. Zugegeben, das wird ein bisschen schwierig zu pflegen sein, und in der Tat ist dies einer der größeren Abzweigungen von TDD, nach den Tests-zuerst-Programmierung.
Tests sind die Spezifikation des Verhaltens des Programms. Sie ändern sie, wenn Sie die Spezifikationen ändern müssen, weil sie die Spezifikationen sind. Einige, die mir in den Sinn kommen ...
Die Hauptqualität, die der Testcode haben muss, ist die Lesbarkeit. Daher sollten Sie die Tests regelmäßig ändern wegen ...
Dann gibt es auch Fälle, in denen die Tests unterbrochen sind, zum Beispiel brüchige Tests für gleichzeitigen Code, die meistens passieren, aber immer wieder fehlschlagen, obwohl der Code korrekt ist. In solchen Fällen sollten die Tests so festgelegt werden, dass sie wiederholbarer sind (es kann erforderlich sein, den Code zu ändern, um leichter testbar zu sein - das Beste ist, Parallelität mit geeigneten Entwurfsmustern zu vermeiden / einzuschränken).
Tags und Links unit-testing