272 votes

NUnit : Assert.Throws

Comment utiliser `` pour affirmer le type d’exception et le libellé de message effectif.

Quelque chose comme ceci :

La méthode que je teste lève plusieurs messages du même type, avec différents messages, et j’ai besoin d’un moyen de tester que le message correct est levé en fonction du contexte.

496voto

Patrik Hägne Points 7735

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.

25voto

Jackson Pope Points 9294

Vous pouvez maintenant utiliser le `` attributs, par exemple

15voto

Jordan Morris Points 360
Assert.That(myTestDelegate, Throws.ArgumentException
    .With.Property("Message").EqualTo("your argument is invalid."));

3voto

fre0n Points 987

À s’agrandir sur la persistance de la réponse, et pour fournir plus de la fonctionnalité de NUnit, vous pouvez faire ceci :

Exemples :

2voto

persistent Points 133

C’est une longue période, puisque cette question a été soulevée, je me rends compte, mais j’ai récemment rencontré la même chose et suggèrent que cette fonction MSTest :

utilisation :

Plus de détails ici : http://phejndorf.wordpress.com/2011/02/21/assert-that-a-particular-exception-has-occurred/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X