Sto cercando di avvolgere la mia testa attorno a TDD, in particolare la parte di sviluppo. Ho guardato alcuni libri, ma quelli che ho trovato affrontano principalmente la parte di test: la storia di NUnit, perché il test è buono, rosso / verde / refactor e come creare un calcolatore di stringhe.
Roba buona, ma questo è "solo" Unit Testing, non TDD. In particolare, non capisco come TDD mi aiuti a ottenere un buon design se ho bisogno di un Design per iniziare a testarlo.
Per illustrare, immagina questi 3 requisiti:
- Un catalogo deve avere un elenco di prodotti
- Il catalogo dovrebbe ricordare quali prodotti sono stati visualizzati da un utente
- Gli utenti dovrebbero essere in grado di cercare un prodotto
A questo punto, molti libri tirano fuori un cappello magico da un cappello e si tuffano semplicemente in "Testing del ProductService", ma non spiegano come sono arrivati alla conclusione che esiste un ProductService in primo luogo. Questa è la parte "Sviluppo" in TDD che sto cercando di capire.
Deve esserci un progetto esistente, ma cose al di fuori dei servizi di entità (vale a dire: c'è un prodotto, quindi dovrebbe esserci un servizio di servizio) non si trova da nessuna parte (ad esempio, il secondo requisito richiede che io abbia un concetto di un Utente, ma dove metterei la funzionalità per ricordare? E la ricerca è una funzionalità del ProductService o un servizio di ricerca separato? Come faccio a sapere quale dovrei scegliere?)
Secondo SOLID , avrei bisogno di un UserService, ma se progetto un sistema senza TDD, potrei finire con un sacco di servizi a metodo singolo. TDD non è destinato a farmi scoprire il mio design in primo luogo?
Sono uno sviluppatore .net, ma funzionerebbero anche le risorse Java. Sento che non sembra esserci una vera e propria applicazione o libro di esempio che tratta una vera linea di applicazione aziendale. Qualcuno può fornire un chiaro esempio che illustra il processo di creazione di un progetto utilizzando TDD?