ASSERT.DoesNotThrow con nunit - Come ottenere la traccia dello stack?
-
28-10-2019 - |
Domanda
Sto usando NUNIT per i test unitari (in esecuzione con td.net).
Quando uso Assert.DoesNotThrow, ottengo l'eccezione, ma senza alcuna traccia di stack, il che rende più difficile identificare il problema della radice.
Come posso affrontare questo?
Soluzione
Il Assert.DoesNotThrow
è ridondante, se un test lancia il test fallirà automaticamente senza un affermazione. Per chiarire ciò che è stato testato è, secondo me, è meglio trasmettere nel nome del metodo di prova. C'è pochissimo beneficio per la documentazione nel Assert.DoesNotThrow
La sintassi e, come fai notare, rende solo più difficile correggere i test di fallimento.
Inoltre, se hai un test molto lungo con più afferma Assert.DoesNotThrow
Riempi un ruolo importante per affermare che il blocco di codice corretto ha lanciato un'eccezione. Tuttavia, in questo caso una soluzione più adatta è vedere se il test può essere abbreviato e/o afferma che si è trasferito nei propri test.
Altri suggerimenti
Dubito che risponda davvero alla tua domanda, ma accorcerei il test a una singola situazione in modo da non aver bisogno di avvolgere un codice in un delegato a cui passi Assert.DoesNotThrow
. Quindi, scrivi il test senza alcuna affermazione. Un test che lancia un'eccezione inaspettata fallirà, quindi farà quello che vuoi e otterrai l'eccezione completa.
Circa il 10%-ish dei miei test funziona in questo modo; Nessuna affermazione e nomi di metodi come ThisOrThatShouldNeverThrow()
.
Un'altra opzione, durante il debug, è quella di eseguire il test in un debugger (utilizzando TD.NET) e in Debug | Eccezioni Controllare alcune caselle aggiuntive in modo che il debugger si fermi quando viene lanciata l'eccezione.