Tendo a schierarmi con i tuoi colleghi, ma solo fino a un certo punto.
Il problema con i test unitari è che sono scritti spesso e senza mente su casi banali in cui un'indagine superficiale del codice rivela che funzionerà a prescindere da cosa. Ad esempio:
def add(x, y)
x + y
end
Insieme a una dozzina di test per assicurarsi che l'aggiunta funzioni effettivamente per casi d'uso scelti in modo arbitrario. Duh ...
La premessa generale alla base del testing delle unità è: se il tuo codice non contiene bug, è perché non hai testato abbastanza. Ora, quando scrivere i test unitari appropriati. Risposte:
- Durante i test
- Quando esegui il debug
- Mentre stai sviluppando cose davvero complicate
Esaminiamo ciascuno di essi, supponendo che tu stia sviluppando una specie di web app.
Scrivi del codice per nuove funzionalità, e dovrebbe funzionare abbastanza bene ora. Quindi protendi il tuo browser e verifica che funzioni 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: per testare le funzionalità di alto livello.
Quindi scopri un bug (che non perde mai niente?). Questo ci porta al secondo punto. Torna al codice e inizia a seguire i passaggi. Mentre lo fai, scrivi i test unitari nei punti di interruzione chiave in cui avere dati coerenti e corretti è fondamentale.
L'ultimo punto è il contrario. Stai progettando alcune funzionalità pelose che implicano un sacco di meta-programmazione. Genera rapidamente un albero decisionale con migliaia di potenziali scenari, e devi assicurarti che ognuno di loro funzioni. Quando si scrivono queste cose, un semplice cambiamento qui o là può avere conseguenze inimmaginabili nella catena alimentare. Supponiamo che tu stia progettando un'implementazione MPTT utilizzando i trigger SQL, in modo che possa funzionare con istruzioni a più righe.
In questo tipo di ambiente spinoso, in genere desideri automatizzare molto i test. Quindi scrivi script per automatizzare la generazione di dati di test ed esegui un carico di unità di test su questi dati di test. Una cosa fondamentale da non perdere di vista mentre fai questo, è che devi anche scrivere dei test unitari per il tuo generatore di test di unità.
Bottom line: unit test, sicuramente si. Ma risparmia te stesso sulle funzionalità di base - fino a quando non ne hai effettivamente bisogno per il debug, o assicurandoti che alcune funzionalità pelose funzionino correttamente (incluso, in quest'ultimo caso, i test stessi).