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.
Vous pouvez maintenant utiliser les
ExpectedException
attributs, par exemplela source
Assert.Throw
vous pouvez cibler la ligne exacte qui vous intéresse.la source
Assert.That(myTestDelegate, Throws.ArgumentException .With.Property(nameof(ArgumentException.Message)).EqualTo("your argument is invalid."));
Exception.Message
. Je recommanderais toujours d'ajouter au moins cette alternative car elleWith.Property
peut également être utilisée sur d'autres objets, ce qui améliorerait la stabilité du code.Il s'agit d'une question ancienne mais pertinente avec des réponses obsolètes, j'ajoute donc la solution actuelle:
Cela fonctionne avec
using Microsoft.VisualStudio.TestTools.UnitTesting;
la source
Pour développer la réponse persistante et fournir davantage de fonctionnalités de NUnit, vous pouvez procéder comme suit:
Exemples:
la source
Il y a longtemps que ce problème a été soulevé, je m'en rends compte, mais j'ai récemment rencontré la même chose et je suggère cette fonction pour MSTest:
usage:
Plus ici: http://phejndorf.wordpress.com/2011/02/21/assert-that-a-particular-exception-has-occured/
la source
Comme je suis dérangé par la verbosité de certains des nouveaux modèles NUnit, j'utilise quelque chose comme ça pour créer du code qui est plus propre pour moi personnellement:
L'utilisation est alors:
la source