Gibt es Open Source-Anwendungen, die mithilfe einer testgetriebenen Entwicklung entwickelt wurden und als Modell dafür dienen, wie gut Unit-Tests funktionieren sollten?
Ich würde es vorziehen, Beispiele in C # und .NET zu sehen. (Beachten Sie, dass ich Anwendungen erwähnt habe, nicht nur Bibliotheken.)
Ich bin ein mittelständischer Programmierer, der wirklich an TDD glauben und es üben möchte. Die App, an der ich in meiner täglichen Arbeit arbeite, ist ziemlich kompliziert - ungefähr 1 Million Codezeilen - und ich würde gerne mehr Unit-Tests einführen. Wir haben einige Unit-Tests durchgeführt, aber meine Bemühungen bei TDD und die Arbeit an Code, der bereits getestet wird, waren nicht ermutigend.
Nach meiner zugegebenermaßen begrenzten Erfahrung scheint TDD im Namen der Entkopplung viel Komplexität zu fördern. Die Teile der App, die schwer zu testen sind und die zufällig kritisch sind, werden an die Peripherie weitergeleitet und in den Bereich der Integrationstests verschoben, die möglicherweise jemals geschrieben wurden oder nicht. (Ich denke hier an die üblichen Verdächtigen, Dateisystemzugriff, Hydratisieren von Objekten aus einer Datenbank, asynchrone Webaufrufe usw.)
Der zu testende Code besteht in der Regel aus einer umfangreichen Zusammenarbeit zwischen Objekten und möglicherweise einer einfachen Ablauflogik, die alle im Speicher abläuft und möglicherweise einfacher und verständlicher geschrieben werden könnte, wenn nicht alles vollständig entkoppelt werden müsste zum Prüfen.
Ich verstehe die Techniken zum Verspotten von Abhängigkeiten und Ähnlichem, aber nach meiner Erfahrung führt die Verwendung von Verspotten zu sehr spröden Tests. Wenn mein erster Instinkt beim Erleben einer Reihe von Tests rot wird: "Großartig, jetzt muss ich alle Fehler beheben", dann sind meine Tests eher ein Widerstand als ein Sicherheitsnetz.
Ich versuche, diese mentale Barriere zu überwinden, und als Teil davon lese ich das Buch von Michael Feathers, Effective Working with Legacy Code . Ich hoffe es wird mir zeigen was ich vermisse.
Ich würde auch gerne einige nicht-triviale .NET-Anwendungen mit guter Codeabdeckung studieren, vielleicht ein Content-Management-System oder eine CRUD-App. Das FitNesse-Test-Framework, über das Onkel Bob spricht, werde ich mir wahrscheinlich ansehen, aber es wäre schön, etwas in der Sprache zu sehen, die ich am besten kenne.
Anregungen oder Worte der Weisheit wäre dankbar.