NUnit prévu des exceptions
J'ai un ensemble de cas de tests, dont certains sont attendus pour lancer des exceptions. De ce fait, j'ai avez défini les attributs de ces tests afin de s'attendre à des exceptions comme:
[ExpectedException("System.NullReferenceException")]
Quand je lance mes tests en local tout est bon. Cependant quand je bouge mes tests sur le serveur CI exécution de TeamCity, tous mes tests qui ont prévu des exceptions échouer. C'est un bug connu.
Je suis conscient qu'il y a aussi le Assert.Throws<>
et Assert.Throws
méthodes que NUnit offre.
Ma question est comment puis-je faire usage de ces à la place de l'attribut, je suis actuellement à l'aide?
J'ai eu un coup d'oeil autour de StackOverflow et essayé quelques petites choses dont aucune ne semble fonctionner pour moi.
Est-il un simple 1 de la ligne de solution à l'aide de cette?
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr de ce que vous avez essayé de vous causer des ennuis, mais vous pouvez tout simplement passer à un lambda comme premier argument à faire Valoir.Jette. Voici l'un de l'un de mes tests de passe:
Bon, cet exemple peut-être un peu verbeux. Supposons que j'ai eu un test
qui voudraient passer normalement, car
o.Foo()
permettrait de lever une exception de type référence nulle.Vous serait alors déposez le
ExpectedException
attribut et l'enveloppe de votre appel ào.Foo()
dans unAssert.Throws
.Assert.Jette
"tente d'invoquer un extrait de code, représentée par un délégué, afin de vérifier qu'il déclenche une exception particulière." Le() => DoSomething()
syntaxe représente un lambda, essentiellement une méthode anonyme. Donc dans ce cas, nous disonsAssert.Throws
pour exécuter le fragmento.Foo()
.Donc, non, vous ne vous contentez pas d'ajouter une seule ligne comme vous le feriez pour un attribut, vous devez explicitement envelopper la section de votre test de jeter l'exception, dans un appel à
Assert.Throws
. Vous n'avez pas nécessairement avoir à utiliser une lambda, mais c'est souvent la plus pratique.Assert.Throws<NullReferenceException>(async () => await o.Foo())
à la place.Voici un exemple simple à l'aide de deux façons.
Si vous ne souhaitez pas utiliser les lambdas.
Par défaut, TeamCity utilise NUnit 2.2.10, qui n'a pas ExpectedException. De vérifier la TeamCity "NUnit pour NAnt" docs à voir comment le changer pour quelque chose de plus moderne, y compris la liste des communiqués de TeamCity fournit.
NUnit a ajouté un nouveau Record.Exception méthode.
Si vous préférez Actes distincts, et Affirme ensuite
Loi:
Affirmer: