Tendo a schierarmi con i tuoi colleghi, ma solo fino a un certo punto.
Il problema con i test unitari è che sono scritti frequentemente e inconsapevolmente su casi insignificanti in cui un'indagine rapida del codice rivela che funzionerà a prescindere. Per esempio:
def add(x, y)
x + y
end
Insieme a una dozzina di test per assicurarsi che l'aggiunta funzionerà davvero per casi d'uso scelti arbitrariamente. Duh ...
La premessa generale alla base del test unitario è: se il tuo codice non contiene bug, è perché non hai testato abbastanza. Ora, quando scrivere test unitari adeguati. risposte:
- Quando stai testando
- Quando esegui il debug
- Mentre stai sviluppando cose davvero difficili
Esaminiamo ciascuno di essi, supponendo che tu stia sviluppando un qualche tipo di app web.
Scrivi del codice su nuove funzionalità e dovrebbe funzionare abbastanza bene ormai. Quindi raggiungi il tuo browser e verifichi che funzioni testando più intensamente, giusto? Bzzzt! ... Risposta sbagliata. Scrivi un test unitario. Se non lo fai ora, probabilmente non lo farai mai. E questo è uno dei luoghi in cui i test unitari funzionano molto bene: testare funzionalità di alto livello.
Quindi scopri un bug (a chi non manca mai nessuno?). Questo ci porta al punto due. Ti immergi nuovamente nel codice e inizi a seguire i passaggi. Mentre lo fai, scrivi i test unitari nei punti di interruzione chiave in cui è fondamentale disporre di dati coerenti e corretti.
L'ultimo punto è il contrario. Stai progettando alcune funzionalità pelose che comportano un sacco di meta-programmazione. Genera rapidamente un albero decisionale con migliaia di scenari potenziali e devi assicurarti che ciascuno di essi funzioni. Quando si scrivono cose del genere, un semplice cambiamento qui o là può avere conseguenze inimmaginabili lungo la catena alimentare. Supponiamo che tu stia progettando un'implementazione MPTT usando i trigger SQL, in modo che possa funzionare con istruzioni a più righe.
In questo tipo di ambiente spinoso, in genere vorrai automatizzare fortemente i tuoi test. Quindi scrivi script per automatizzare la generazione di dati di test ed esegui un carico di test unitari su questi dati di test. Una cosa cruciale da non perdere durante questa operazione è che devi anche scrivere unit test per il tuo generatore di unit test.
Bottom line: unit test, sicuramente sì. Ma risparmia quelli sulla funzionalità di base - fino a quando non ne avrai realmente bisogno per il debug o assicurandoti che alcune funzionalità pelose funzionino correttamente (compresi, in quest'ultimo caso, i test stessi).