Mentre praticavo il TDD, mi sono imbattuto in questa specifica:
Un utente deve essere creato con la password hash, essere persistente e restituire un token di attivazione.
Il mio primo test di unità (con l'obiettivo di iniziare a testare questo scenario) dovrebbe comprendere tutte le esigenze? :
shouldPersistTheNewlyCreatedUserWithAHasedPasswordAndReturnACorrespondingActivationToken
O meglio, suddividendo le sue parti principali in diversi test più piccoli e testando in modo incrementale:
shouldCreateAUser
shouldReturnAUserActivationToken
shouldReturnAnActivationTokenBasedOnNewlyCreatedUserEmail
shouldPersistTheNewlyCreatedUser
shouldHashTheUserPersistBeforePersistingIt
Per dirla in poche parole, dovrei rielaborare lo stesso test fino a quando non passa un intero scenario? O dovrei procedere in modo incrementale specificando funzionalità aggiuntive in altri piccoli test.
IMHO, il vantaggio della prima soluzione è che la spec sta definendo in un punto, non c'è bisogno di raccogliere alcuni pezzi di funzionalità per capire il tutto. D'altra parte, il numero di asserzioni e aspettative potrebbe essere enorme, quindi il codice del test sarebbe meno leggibile.