(In contrasto con la risposta di mcottle) Risposta lunga: NO ... il più delle volte
Quando dici che ti aspetti che un test generi un'eccezione particolare, saprai quando QUALSIASI linea in quel test solleva quella particolare eccezione.
Non è proprio la stessa cosa che sapere che il metodo sotto test genera l'eccezione.
Se il tuo test prevede l'impostazione di un oggetto o di un contesto (all'interno del test, non all'interno della versione del framework di SetUp
), potresti trovarti meglio avvolgere la singola linea che vuoi testare in un try / catch, possibilmente con un aiuto.
Ad esempio,
public static class AssertHelper {
public delegate void Thunk();
public static void DoesNotThrow<T>(Thunk thunk, string message = "")
where T: Exception {
try {
thunk.Invoke();
} catch(T) {
Assert.Fail(message);
}
}
}
e poi
[TestMethod]
public void assertHelperInAction() {
// Random setup stuff here that's too annoying to put in my SetUp
// method.
AssertHelper.DoesNotThrow<IllegalArgumentException>(() =>
{/* My random method under test */})
}
Se questo test fallisce, so che il mio metodo in prova ha gettato l'eccezione, e non qualcosa nelle cose di impostazione casuale.
(Dovresti cercare di evitare roba di configurazione casuale, a volte è più semplice avere un codice di configurazione nel test.)