Simula il fallimento / situazione eccezionale.
I tuoi oggetti simulati sono manichini dei crash test e sai già cosa può andare storto, non dovrebbe essere difficile da emularlo (lo sai perché lo hai già preparato, se non lo fai, bene, tu scoprirò presto;). E ... è sempre incredibilmente divertente scollegare fisicamente il server del database mentre i processi sono in esecuzione. In realtà non è scalabile come metodo di test, ma è fantastico anche se lo fai solo una volta.
Considera questo esempio banale / eccessivamente semplicistico:
-
Class A
fa qualcosa e lancia un'eccezione OMGSomethingBroke
se qualcosa va storto.
-
Class B
chiama Class A
, e nel caso qualcosa si rompa, cattura l'eccezione e la registra (o qualsiasi altra cosa).
Quello che devi fare è creare una simulazione di Class A
, chiamiamola Mock A
che non fa altro che lanciare l'eccezione OMGSomethingBroke
. Mock A
e Class A
dovrebbero implementare la stessa interfaccia, e questo è tutto. Hai emulato l'errore e ora puoi passare a testare Class B
. Chiamare Mock A
anziché Class A
e verificare se gestisce correttamente l'errore.
I test possono essere eccezionalmente semplici se il tuo progetto è solido (sì, entrambi i giochi di parole sono pensati).
Ho appena trovato un Udacity molto interessante corso, Test del software (CS258) - Come fare fallire il software :
When writing software, destruction can be just as valuable as creation. Learn how to catch bugs and break software as you discover different testing methods that will help you build better software.
Il corso ha un ambito più ampio della tua domanda , ovviamente, ma il messaggio principale nel suo riassunto si applica: Breaking stuff is fun! (Bene, e un buon modo per testare il software).