Qui sono le mie regole per i test ideale di comportamento a rottura:
- Se si utilizza dipendenze che potrebbero generare eccezioni, allora si dovrebbe includere unit test che rendono i vostri prende in giro di gettarle eccezioni.
- Se in determinate condizioni il codice deve generare un'eccezione, è necessario includere i test di unità che configurano tali condizioni.
La prima permette di sapere che cosa il vostro codice si comporta come in Errore esterno, e spesso porta a ripensamenti su cosa fare. In tutte le situazioni è bello vedere cosa succede realmente. Il secondo si limita a mantenere ciò che prometti, per quanto riguarda gli errori che il tuo codice dovrebbe rilevare e considerare eccezionali. Non è diverso da testare altre funzionalità nel codice.
Prima di considerare completa la suite di test unitari, è necessario dare un'occhiata al codice codice di copertura del codice in prova. Per codice non banale, c'è quasi sempre un modo in cui il mio ramo di codice che i miei test di unità non coprono o, peggio, ha un comportamento che non ho inteso. Sorprendentemente spesso, la soluzione è rimuovere quel codice piuttosto che aggiungere altri test. Solo cruft lasciato alle spalle quando si vola prima.
Non sto dicendo necessariamente che si dovrebbe raggiungere una copertura del 100%, ma si dovrebbe fare un test dell'unità basata sulla copertura del codice perché è un modo più visivo per comprendere ed esporre i comportamenti del codice esistenti. Basta guardarlo per darti nuove idee su come effettuare il refactoring del codice per ottenere Single Responsibility Principle e Separation of Concerns.
È sempre divertente eseguire il debug di un problema di produzione in cui l'arresto si trova nel blocco catch – Mark
Se si tratta solo di logging e rethrowing, non mi preoccuperei. Probabilmente. Finché stavo testando la registrazione altrove. Se sta facendo qualcosa di importante, lo farei. – serialhobbyist
Sì, anche se il rollback di una transazione può essere (non sempre) un processo piuttosto pesante, che a mio avviso dovrebbe essere testato. In questo caso, probabilmente lo testerei. –