Tutti gli esempi che ho letto e visto nei 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, e scrivo il mio test e il minimo indispensabile per farlo passare (dopo che fallisce per la prima volta, rosso). Quando torno e scrivo il codice reale? E quanto codice reale scrivo prima di ripetere il test? Immagino che l'ultimo sia più intuizione.
Modifica: grazie a tutti coloro che hanno risposto. Tutte le tue risposte mi hanno aiutato immensamente. Sembra che ci siano idee diverse su ciò 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 progetto, ho un'architettura con cui voglio iniziare, User Stories, e così via. Da qui, prendo quelle User Story e creo un test per testare User Story. L'utente dice: abbiamo persone che si iscrivono alla scuola e paghiamo le tasse di registrazione. Quindi, penso a un modo per farlo fallire. Nel fare ciò, 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, TD Design mi sta costringendo a riflettere sulla storia. Se riesco a far fallire un test, so perché non riesce, ma questo presuppone che posso farcela. Riguarda la progettazione.
Ho paragonato questo a pensare alla 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 rompe", quando fermarsi (la mia opinione, ovviamente.) Quindi devo pensare a ciò che si ferma prima la ricorsione. È solo un'analogia imperfetta e presuppone che ogni iterazione ricorsiva sia un "passaggio". Ancora una volta, solo un'opinione.
Nell'attuazione, la scuola è più difficile da vedere. I registri numerici e bancari sono "facili", nel senso che è possibile utilizzare l'aritmetica semplice. Riesco a vedere a + b e restituire 0, ecc. Nel caso di un sistema di persone, devo pensare di più su come implementarlo . Ho il concetto di fail, pass, refactor (principalmente a causa dello studio e di questa domanda).
Ciò che non so è basato sulla mancanza di esperienza, secondo me. Non so come fallire la registrazione di un nuovo studente. Non so come fallire qualcuno che digita un cognome e viene salvato in un database. So come creare 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.