Sto cercando di avvolgere la mia mente su TDD, in particolare sulla parte di sviluppo. Ho esaminato alcuni libri, ma quelli che ho trovato riguardano principalmente la parte di test: la cronologia di NUnit, perché i test sono buoni, Red / Green / Refactor e come creare un calcolatore di stringhe.
Roba buona, ma quella è "solo" Unit Testing, non TDD. Nello specifico, 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 estraggono un coniglio magico da un cappello e si immergono semplicemente in "Test del ProductService", ma non spiegano in che modo sono giunti alla conclusione che esiste un ProductService in primo luogo. Questa è la parte "Sviluppo" in TDD che sto cercando di capire.
Ci deve essere un progetto esistente, ma roba al di fuori dei servizi di entità (cioè: c'è un prodotto, quindi ci dovrebbe essere un ProductService) non è stato trovato da nessuna parte (ad esempio, il secondo requisito richiede che io abbia un po 'di concetto di un utente, ma dove dovrei mettere la funzionalità da ricordare? E cercare una funzionalità del ProductService o un SearchService separato? Come faccio a sapere quale scegliere?)
Secondo SOLID , avrei bisogno di un UserService, ma se progetto un sistema senza TDD, potrei finire con un sacco di servizi a singolo metodo. TDD non è destinato a farmi scoprire il mio design in primo luogo?
Sono uno sviluppatore .net, ma anche le risorse Java funzionerebbero. Sento che non sembra esserci una vera applicazione di esempio o un libro che si occupa di una vera linea di applicazione aziendale. Qualcuno può fornire un chiaro esempio che illustra il processo di creazione di un disegno usando TDD?