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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top