(Contrairement à la réponse de mcottle) Réponse longue: NON ... la plupart du temps
Lorsque vous dites que vous vous attendez à ce qu'un test déclenche une exception particulière, vous saurez quand N'IMPORTE QUELLE ligne de ce test déclenche cette exception particulière.
Ce n'est pas tout à fait la même chose que de savoir que la méthode testée lève l'exception.
Si votre test implique la mise en place d'un objet ou d'un contexte (dans le test, pas dans la version de votre framework SetUp
), vous feriez peut-être mieux d'encapsuler la seule ligne que vous souhaitez réellement tester dans un try / catch, éventuellement avec une aide.
Par exemple,
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);
}
}
}
puis
[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 */})
}
Si ce test échoue, je sais que ma méthode en cours de test a levé l'exception, et pas quelque chose dans la configuration aléatoire.
(Vous devriez essayer d'éviter les choses de configuration aléatoire. Parfois, il est plus facile d'avoir du code de configuration dans le test.)