Unit-Tests erleichtern nicht nur das Design, sondern sind auch einer ihrer Hauptvorteile.
Das Schreiben von Test-First vertreibt die Modularität und saubere Codestruktur.
Wenn Sie Ihren Code test-first schreiben, werden Sie feststellen, dass alle "Bedingungen" einer bestimmten Codeeinheit automatisch an Abhängigkeiten weitergegeben werden (normalerweise über Mocks oder Stubs), wenn Sie sie in Ihrem Code annehmen.
"Bei gegebener Bedingung x, erwarte Verhalten y" wird häufig zu einem zu liefernden Stub x
(was ein Szenario ist, in dem der Test das Verhalten der aktuellen Komponente verifizieren muss) und y
wird zu einem Mock, bei dem ein Aufruf verifiziert wird das Ende des Tests (es sei denn, es ist ein "sollte zurückgeben y
", in welchem Fall der Test nur den Rückgabewert explizit verifizieren wird).
Sobald sich dieses Gerät wie angegeben verhält, schreiben Sie die entdeckten Abhängigkeiten (für x
und y
).
Dies macht das Schreiben von sauberem, modularem Code zu einem sehr einfachen und natürlichen Prozess, bei dem es sonst oft einfach ist, Verantwortlichkeiten zu verwischen und Verhaltensweisen zusammenzufügen, ohne es zu merken.
Wenn Sie später Tests schreiben, erfahren Sie, wenn Ihr Code schlecht strukturiert ist.
Wenn das Schreiben von Tests für einen Codeteil schwierig wird, weil zu viele Dinge zum Stoppen oder Verspotten vorhanden sind oder weil die Dinge zu eng miteinander verbunden sind, wissen Sie, dass Sie Verbesserungen an Ihrem Code vornehmen müssen.
Wenn "Ändern von Tests" zu einer Belastung wird, weil eine Einheit so viele Verhaltensweisen aufweist, wissen Sie, dass Sie Verbesserungen an Ihrem Code vornehmen müssen (oder einfach an Ihrer Vorgehensweise beim Schreiben von Tests - dies ist jedoch nach meiner Erfahrung normalerweise nicht der Fall). .
Wenn Ihre Szenarien zu kompliziert werden ( „wenn x
und y
und z
dann ...“) , weil Sie zu abstrahieren mehr benötigen, können Sie wissen , dass Sie Verbesserungen in Ihrem Code zu machen.
Wenn Sie aufgrund von Duplizierung und Redundanz dieselben Tests in zwei verschiedenen Fixtures durchführen, wissen Sie, dass Sie Verbesserungen an Ihrem Code vornehmen müssen.
Hier ist ein ausgezeichneter Vortrag von Michael Feathers , der die sehr enge Beziehung zwischen Testbarkeit und Design im Code demonstriert (ursprünglich gepostet von displayName in den Kommentaren). Der Vortrag geht auch auf einige häufige Beschwerden und Missverständnisse in Bezug auf gutes Design und Testbarkeit im Allgemeinen ein.