Bestimmt. Einige Leute sagen, "jeder Test ist besser als gar kein Test". Ich stimme dem überhaupt nicht zu - schlecht geschriebene Tests belasten Ihre Entwicklungszeit und Sie verschwenden am Ende Tage damit, "kaputte" Tests zu reparieren, da es sich in erster Linie nicht um gute Komponententests handelte. Für mich sind im Moment die beiden Dinge, auf die ich mich konzentriere, um meine Tests wertvoller zu machen, als eine Belastung:
Wartbarkeit
Sie sollten das Ergebnis testen ( was passiert), nicht die Methode ( wie passiert es). Ihr Setup für den Test sollte so weit wie möglich von der Implementierung entkoppelt sein: Richten Sie nur Ergebnisse für Serviceabrufe usw. ein, die unbedingt erforderlich sind.
- Verwenden Sie ein spöttisches Framework, um sicherzustellen, dass Ihre Tests nicht von externen Faktoren abhängig sind
- Bevorzugen Sie Stubs gegenüber Mocks (wenn Ihr Framework sie unterscheidet), wo immer dies möglich ist
- Keine Logik in Tests! Ifs, Switches, For-Eaches, Cases, Try-Catches usw. sind allesamt große Nein-Nummern, da sie Fehler in den Testcode selbst einführen können
Lesbarkeit
Es ist in Ordnung, ein bisschen mehr Wiederholungen in Ihren Tests zuzulassen, die Sie normalerweise in Ihrem Produktionscode nicht zulassen würden, wenn dies die Lesbarkeit erhöht. Gleichen Sie dies einfach mit den oben genannten Wartungsmöglichkeiten aus. Seien Sie ausdrücklich dabei, was der Test tut!
- Versuchen Sie, für Ihre Tests einen "Arrangier-, Handlungs- und Durchsetzungsstil" beizubehalten. Dies trennt Ihre Einstellungen und Erwartungen an das Szenario von der ausgeführten Aktion und dem durchsetzten Ergebnis.
- Behalten Sie eine logische Zusicherung pro Test bei (wenn der Name Ihres Tests "und" enthält, müssen Sie ihn möglicherweise in mehrere Tests aufteilen).
Abschließend sollten Sie sich sehr mit "stinkenden" Tests beschäftigen - sie können nur eine Verschwendung Ihrer Zeit sein und keinen Wert liefern.
Du hast gesagt:
Unit-Tests erfordern normalerweise verschiedene "stinkende Hacks" wie Stubbing-Funktionen.
Klingt so, als ob Sie es definitiv gebrauchen könnten, sich über einige Unit-Testing-Techniken zu informieren, beispielsweise über die Verwendung eines Mocking-Frameworks, um Ihr Leben viel einfacher zu machen. Ich würde The Art of Unit Testing , das das oben Genannte und vieles mehr behandelt, wärmstens empfehlen . Ich fand es aufschlussreich, nachdem ich lange Zeit mit schlecht geschriebenen, nicht zu wartenden, "stinkenden" Tests zu kämpfen hatte. Es ist eine der besten Zeitinvestitionen, die ich in diesem Jahr getätigt habe!