Assert.Throws
renvoie l'exception qui est levée qui permet de faire valoir sur 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 une exception de type incorrect est lancé, la première Assert.Throws
assertion échoue. Toutefois, si une exception de type correct est lancé alors vous pouvez maintenant faire valoir sur l'exception que vous avez enregistré dans la variable.
En utilisant ce modèle, vous pouvez faire valoir sur d'autres choses que le message de l'exception, par exemple dans le cas d' ArgumentException
et les produits 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 fluent pour faire ces affirme:
Assert.That(() => foo.Bar(null),
Throws.Exception
.TypeOf<ArgumentNullException>()
.With.Property("ParamName")
.EqualTo("bar"));
Une petite astuce quand elle affirme sur des messages d'exception est de décorer la méthode de test à l' SetCultureAttribute
à assurez-vous que la levée de message est à l'aide de l'attendu de la culture. Ceci entre dans le jeu si vous stockez vos messages d'exception comme des ressources pour permettre la localisation.