Ich versuche, mich mit TDD zu beschäftigen, insbesondere mit dem Entwicklungsteil. Ich habe mir einige Bücher angesehen, aber die, die ich gefunden habe, befassen sich hauptsächlich mit dem Testteil - der Geschichte von NUnit, warum das Testen gut ist, Rot / Grün / Refaktor und wie man einen Zeichenkettenrechner erstellt.
Gutes Zeug, aber das ist "nur" Unit Testing, nicht TDD. Insbesondere verstehe ich nicht, wie TDD mir hilft, ein gutes Design zu erhalten, wenn ich ein Design benötige, um es zu testen.
Stellen Sie sich zur Veranschaulichung diese drei Anforderungen vor:
- Ein Katalog muss eine Produktliste enthalten
- Der Katalog sollte sich merken, welche Produkte ein Benutzer angesehen hat
- Benutzer sollten in der Lage sein, nach einem Produkt zu suchen
An diesem Punkt ziehen viele Bücher ein magisches Kaninchen aus dem Hut und tauchen nur in "Testing the ProductService" ein, aber sie erklären nicht, wie sie zu dem Schluss gekommen sind, dass es überhaupt einen ProductService gibt. Das ist der "Entwicklungsteil" in TDD, den ich zu verstehen versuche.
Es muss ein vorhandenes Design geben, aber Dinge außerhalb von Entity-Services (das heißt: Es gibt ein Produkt, also sollte es einen ProductService geben) sind nirgends zu finden (z. B. erfordert die zweite Anforderung, dass ich ein Konzept von a habe Benutzer, aber wo sollte ich die Funktionen zur Erinnerung hinstellen? Und ist Suche eine Funktion des ProductService oder ein separater SearchService? Woher sollte ich wissen, welche ich wählen soll?)
Laut SOLID würde ich einen UserService benötigen, aber wenn ich ein System ohne TDD entwerfe, könnte es sein, dass ich eine ganze Reihe von Single-Method Services bekomme. Soll ich mit TDD nicht erst mein Design entdecken?
Ich bin ein .NET-Entwickler, aber Java-Ressourcen würden auch funktionieren. Ich habe das Gefühl, dass es anscheinend keine echte Beispielanwendung oder ein Buch gibt, die bzw. das sich mit einer echten Branchenanwendung befasst. Kann jemand ein klares Beispiel liefern, das den Prozess der Erstellung eines Designs mit TDD veranschaulicht?