Tutti gli esempi che ho letto e visto sui video di formazione hanno esempi semplicistici. Ma cosa non vedo se come faccio il codice "reale" dopo che divento verde. È questa la parte "Refactor"?
Se ho un oggetto abbastanza complesso con un metodo complesso, scrivo il mio test e il minimo indispensabile per farlo passare (dopo che fallisce, Red). Quando torno indietro e scrivo il codice reale? E quanto codice reale scrivo prima di ripetere il test? Immagino che l'ultimo sia più intuito.
Modifica: Grazie a tutti coloro che hanno risposto. Tutte le tue risposte mi hanno aiutato immensamente. Sembra che ci siano idee diverse su quello che stavo chiedendo o confuso, e forse c'è, ma quello che stavo chiedendo era, diciamo, che ho una domanda per costruire una scuola.
Nel mio design, ho un'architettura con cui voglio iniziare, User Story, e così via. Da qui, prendo quelle User Story e creo un test per testare User Story. L'utente dice, Abbiamo persone iscriversi per la scuola e pagare le tasse di registrazione. Quindi, penso a un modo per farlo fallire. In tal modo, progetto una classe di test per la classe X (forse Student), che fallirà. Quindi creo la classe "Studente". Forse "Scuola" non lo so.
Ma, in ogni caso, il TD Design mi costringe a pensare attraverso la storia. Se riesco a far fallire un test, so perché fallisce, ma questo presuppone che io possa farlo passare. Riguarda la progettazione.
Paragone questo al pensiero sulla ricorsione. La ricorsione non è un concetto difficile. Potrebbe essere più difficile tenerne traccia nella tua testa, ma in realtà, la parte più difficile è sapere, quando la ricorsione "si interrompe", quando fermarsi (la mia opinione, ovviamente.) Quindi devo pensare a cosa si ferma prima la Ricorsione. È solo un'analogia imperfetta e presuppone che ogni iterazione ricorsiva sia un "passaggio". Di nuovo, solo un parere.
Nell'implementazione, la scuola è più difficile da vedere. I registri numerici e bancari sono "facili" nel senso che puoi usare l'aritmetica semplice. Riesco a vedere a + b e a restituire 0, ecc. Nel caso di un sistema di persone, devo pensare più a fondo su come implementarlo . Ho il concetto di fallire, passare, refactoring (principalmente per lo studio e questa domanda).
Ciò che non so è basato sulla mancanza di esperienza, secondo me. Non so come fallire l'iscrizione a un nuovo studente. Non so come fallire qualcuno che digita un cognome e viene salvato in un database. So come fare un + 1 per la matematica semplice, ma con entità come una persona, non so se sto solo testando per vedere se ottengo un ID univoco del database o qualcos'altro quando qualcuno inserisce un nome in un database o entrambi o nessuno dei due.
O forse questo dimostra che sono ancora confuso.