Torno a parlare, ancora una volta, dell'argomento unit test questa volta per condividere il risultato di un'esperienza che difficilmente avrei immaginato.
Questo è lo scenario. In questi giorni mi sono trovato a dover realizzare la configurazione per il deploy di un progetto Rails del quale non ho seguito direttamente lo sviluppo. Obiettivo della mia attività era predisporre il progetto per la messa online ed eseguire una serie di attività di normalizzazione.
Il progetto si basa su Rails 2.1 e, purtroppo, durante lo sviluppo la fase di creazione dei test è stata ignorata. Normalmente, la prima cosa che faccio appena apro un progetto Rails è lanciare la test suite e verificare eventuali errori.
$ cd trunk $ rake
La prima volta che ho lanciato questo comando ho ricevuto un centinaio di errori, per la maggior parte dovuti ai pochi test preconfigurati da Rails che, in seguito allo sviluppo, erano stati invalidati.
Uno alla volta ho risolto tutti i conflitti portando l'applicazione ad eseguire correttamente la test suite senza generare alcuna eccezione. A questo punto, il risultato erano decine di test file pressoché vuoti ma che almeno potevano essere eseguiti senza problemi.
Il secondo passo prevedeva l'upgrade di Rails alla 2.2.2. Aggiorno la versione del framework come indicato in questo articolo e, per abitudine, lancio la test suite. Mentre rake faceva il suo lavoro mi dico "che stupido, tanto non ci sono test! che sto lanciando?!?"
Gulp! 4 eccezioni generate.
Pur essendo completamente vuoti, i test hanno praticamente forzato l'esecuzione di ogni singolo controller dell'applicazione, anche quello più remoto, consentendomi così di individuare immediatamente tutti gli errori di compilazione causati da incompatibilità del progetto con Rails 2.2. Probabilmente, usando il programma normalmente ci saremmo accorti di quei problemi anche tra qualche mese... o forse mai!
Morale della favola, meglio avere una test suite vuota che non averla affatto o, peggio ancora, averla invalida. Nel primo caso, infatti, anche se vuota potrà comunque avere una sua utilità .
A questo punto, anche i più scettici afflitti dal morbo del "ma ci vuole tempo a sviluppare una test suite" non hanno più motivo per rinunciare ad dotazione di test funzionanti.