Più passa il tempo più mi posso dichiarare test-infected. Ieri notte ho fatto un ulteriore passo verso la dipendenza.
Un tipo di test cui non riuscivo a dare un'organizzazione armonica è il test da ripetere più volte variando semplicemente i parametri.
Facciamo un esempio stupido: un metodo che restituisce il logaritmo in base 10 dell'input. Volendolo testare in modo pignolo potrei volere verificare:
log(10) = > 1
log(1) = > 0
log(0.1) = > -1
potrei scrivere tre test:
Ma già con tre casi di test mi sembra di aver scritto troppo codice, figuriamoci se invece di un esempio stessi scrivendo qualcosa di serio... In alternativa potrei mettere tutti e tre i casi in un unico test
Ma un test così è solo un contratto ad insultarmi da solo la prima volta che il primo dei tre controlli fallirà: perderei la visibilità sui controlli successivi.
In parole povere definisco una classe TestCase che prende com parametri del costruttore il metodo di test e i valori che questo deve testare. Poi nella TestSuite aggiungo alla suite varie istanze della classe di TestCase, ognuno parametrizzata diversamente.
Questa soluzione, per quanto un po' più convoluta di un testCase classico supera (per i miei gusti) i limiti delle altre soluzioni:
La sezione di codice in cui posso modificare o aggiunger test è concentrata
Tutti i casi di test girano indipendenti, garantendomi maggiori dettagli quando risveglio la barra rossa.