I test unitari hanno diversi scopi correlati:
- Verifica che i requisiti siano soddisfatti;
- Sviluppa specifiche più precise per il codice;
- Prova le unità funzionali isolate;
- Rendi più semplice il test di regressione (ad esempio, assicurati di non interrompere il codice di lavoro).
Verifica che i requisiti siano soddisfatti
Ad esempio, sto lavorando su un codice per visualizzare la cronologia delle transazioni per un conto bancario. Ho il requisito che se ottengo un record di cronologia in cui commissioni, depositi o importi di interessi sono maggiori di 0, li suddivido in voci separate con i loro codici e descrizioni delle transazioni. Un metodo in una classe ne è responsabile, quindi scrivo codice che chiama direttamente quel metodo (o, se quel particolare metodo non è pubblicamente visibile, chiamo il metodo che chiama il metodo in prova) con input noti per ogni caso, quindi controllare i risultati per ciascuno di questi input per verificare che siano state create le sub-transazioni corrette, con i dati corretti.
Sviluppa specifiche più precise per il codice
Mentre sviluppi i tuoi test unitari, troverai inevitabilmente che i requisiti non coprono tutti i casi possibili. Ad esempio, ho un altro requisito che dice se il codice della transazione è X, fai una cosa, e se è Y, fai qualcos'altro. Ma non c'è nulla che mi dica cosa fare se il codice della transazione non è né X né Y. È un buco nelle specifiche che devono essere riempite, in questo caso dall'architetto. È un buon modo per controllare il tuo lavoro.
In un certo senso, il test unitario diventa la specifica per il codice.
Verifica unità funzionali isolate
Questo è un grosso problema. Il test unitario ti consente di testare il tuo codice mentre lo stai scrivendo ; non devi aspettare fino a quando tutti i pezzi sono a posto prima che il test possa iniziare. Se stai testando una parte di codice che si basa su un'altra classe o metodo, puoi scrivere un'implementazione fittizia di quella classe o metodo che restituisce valori noti o si comporta in modo noto, in modo da poter testare scenari specifici.
Ti incoraggia anche a considerare il tuo codice in modo più aggressivo, riducendo le dipendenze tra i componenti, il che rende il codice più facile da mantenere ed estendere.
Semplifica i test di regressione
Lo scenario da incubo sta rilasciando una patch che rompe il codice funzionante. Eseguendo i test unitari come parte di ogni build, si protegge da rotture accidentali perché il test associato fallirà. È quindi possibile analizzare l'errore e vedere se l'interruzione è reale (ad esempio, qualcuno codificato in un bug) o se il requisito / specifica è cambiato e regolare di conseguenza il test dell'unità.