L'idea del collaudo di unità è di consentire lo sviluppo di codice completamente modulare. Probabilmente già sai che il codice modulare è la strada da percorrere, in quanto incoraggia i disegni riutilizzabili e chiaramente mirati.
Se si tenta di testare un intero sistema nel suo complesso, allora molte parti diverse hanno la possibilità di fallire. In qualsiasi sistema di dimensioni ragionevoli, sarebbe quasi impossibile tenere conto di ogni possibile problema. Inoltre, quando vengono rilevati problemi, potrebbe essere difficile (o quasi impossibile) individuare il codice responsabile.
Tuttavia, se porzioni diverse del codice sono completamente separate da altre parti (ad esempio, non dipendono l'una dall'altra), è possibile utilizzare il test dell'unità per verificare un sottoinsieme del sistema più grande. È molto più facile rilevare i bug in una piccola quantità di codice, piuttosto che in grandi quantità.
Nell'esempio che hai presentato, ci sono due super-porzioni del tuo codice: la parte che recupera i dati da un database; e la parte che elabora tali dati. Se si è tentato di testare i due insieme, il test potrebbe essere crivellato di errori a causa del tentativo di accesso al database. Esistono numerose reti e altri problemi di I / O che potrebbero emergere durante la lettura del database. Soprattutto in casi estremi, questo può rendere molto difficile testare la porzione di elaborazione del codice. Allo stesso modo, potrebbero esserci dei bug nel codice di elaborazione che, per qualche motivo, non sono chiaramente localizzati all'interno di quella parte del codice.
La soluzione è usare il test dell'unità. Invece di testare il recupero e l'elaborazione di insieme , li separi. È possibile alimentare tutti i dati che si desidera alla parte di elaborazione per vedere se funziona correttamente. Se qualcosa va storto, si sa che il problema è un problema di elaborazione e non relativo alla lettura del database. Allo stesso modo, è possibile eseguire semplici test per garantire che si stia tentando di accedere a quel database in modo corretto. Eventuali problemi che si presentano in questo momento sono sicuramente correlati alla lettura del database.
Quindi il testing delle unità è davvero inestimabile nel test del codice per la robustezza. Inoltre, incoraggia un modello di progettazione che è molto incoraggiante. Nello specifico, gli sviluppatori che utilizzano i test unitari devono progettare in modo tale che il loro codice possa essere separato in unità modulari. Ad esempio, una funzione che si basa pesantemente sullo stato mutabile globale è intrinsecamente meno testabile in unità di una funzione che si basa solo su argomenti per produrre un risultato.
Modifica
Una cosa che ho dimenticato di menzionare è che i test unitari non sono un ripensamento. Sono concepiti per essere parte integrante del processo di sviluppo, in modo che le piccole parti di codice siano garantite come robuste. Ciò aumenta la robustezza del codice durante lo sviluppo. Come ogni nuova porzione è scritta, può essere immediatamente testata dall'unità per scoprire potenziali difetti. Pertanto, vengono poste solide fondamenta su quali livelli di codice robusto possono essere scritti. Il risultato finale è che un prodotto finale ha più probabilità di avere un livello di correzione molto più alto di un prodotto equivalente che viene testato dopo il processo di sviluppo. Inoltre, il tempo impiegato per i test è generalmente ridotto.