Assert.Throws
renvoie l'exception levée qui vous permet d'affirmer l'exception.
var ex = Assert.Throws<Exception>(() => user.MakeUserActive());
Assert.That(ex.Message, Is.EqualTo("Actual exception message"));
Donc, si aucune exception n'est levée ou si une exception de type incorrect est levée, la première Assert.Throws
assertion échouera. Cependant, si une exception du type correct est levée, vous pouvez maintenant affirmer l'exception réelle que vous avez enregistrée dans la variable.
En utilisant ce modèle, vous pouvez affirmer autre chose que le message d'exception, par exemple dans le cas de ArgumentException
et dérivés, vous pouvez affirmer que le nom du paramètre est correct:
var ex = Assert.Throws<ArgumentNullException>(() => foo.Bar(null));
Assert.That(ex.ParamName, Is.EqualTo("bar"));
Vous pouvez également utiliser l'API couramment pour effectuer ces assertions:
Assert.That(() => foo.Bar(null),
Throws.Exception
.TypeOf<ArgumentNullException>()
.With.Property("ParamName")
.EqualTo("bar"));
Ou bien
Assert.That(
Assert.Throws<ArgumentNullException>(() =>
foo.Bar(null)
.ParamName,
Is.EqualTo("bar"));
Une petite astuce lors de l'affirmation sur les messages d'exception consiste à décorer la méthode de test avec SetCultureAttribute
pour vous assurer que le message renvoyé utilise la culture attendue. Cela entre en jeu si vous stockez vos messages d'exception en tant que ressources pour permettre la localisation.