2009-09-06 6 views
5

Sto provando ad utilizzare le nuove modalità di gestione delle eccezioni, ma trovo difficile trovare informazioni su di esso e su come usarlo anche con moq.Come gestire le eccezioni con nunit e moq?

In questo momento ho moq che genera un'eccezione su un metodo di simulazione ma non so come usare nunit per catturarlo e guardarlo.

risposta

14

Ci sono diversi modi per farlo; Io uso Assert.Throws.

var exception = Assert.Throws<YourTypeOfException>(()=> Action goes here); 

ad es.

var exception = Assert 
       .Throws<ArgumentNullException>(()=> new ChimpPuncher(null)); 

È quindi possibile interrogare ulteriormente l'oggetto eccezione se si desidera, ad es.

Assert.That(exception.Message, Text.Contains("paramname"); 
0

Perché non riesci a racchiudere la chiamata del metodo deriso in un blocco try/catch e rilevare l'eccezione specifica generata?

2

Il modo migliore per dire è: [ExpectedException(typeof(ApplicationException))] sopra il metodo di prova.

+0

Il problema con questo approccio è che, se questo tipo di Eccezione viene lanciato da una qualsiasi parte del metodo che è decorata con l'attributo ExpectedException, il test passerà. L'utilizzo del meccanismo Assert.Throws <> riduce l'area della superficie, poiché l'eccezione deve essere generata all'interno del metodo da essa eseguito. –