Test unitario si riferisce a che stai testando, TDD a quando stai testando.
I due sono ortogonali.
Test unitario significa, beh, testare singole unità di comportamento. Un'unità di comportamento individuale è la più piccola unità di comportamento che può essere individualmente testata individualmente. (So che queste due definizioni sono circolari, ma in pratica sembrano funzionare abbastanza bene.)
Puoi scrivere test unitari prima di scrivere il tuo codice, dopo aver scritto il tuo codice o mentre scrivi il tuo codice.
TDD significa (di nuovo, un po 'ovvio) che permette ai tuoi test di guidare il tuo sviluppo (e il tuo design). Puoi farlo con test unitari, test funzionali e test di accettazione. Di solito, li usi tutti e tre.
La parte più importante di TDD è il mezzo D . Hai lasciato che i test ti guidassero . I test ti dicono cosa fare, cosa fare dopo, quando hai finito. Ti dicono quale sarà l'API, quale sarà il design. (Questo è importante: TDD non tratta prima di scrivere i test: ci sono molti progetti che scrivono prima i test ma non praticano il TDD: scrivere i test prima è semplicemente un prerequisito per essere in grado di permettere ai test di guidare lo sviluppo.)