NUnit, est-il possible de poursuivre l'exécution de test après l'Assertion échoue?
Dans un test qui contient quelques affirme, par exemple:
Assert.AreEqual(1,1);
Assert.AreEqual(2,1);
Assert.AreEqual(2,2);
est-il possible de laisser le test de continuer à courir après son échec à un certain point? Dans l'exemple, la première condition est vraie, la seconde échoue et le test s'arrête. J'aimerais également évaluer la condition suivante.
- OMI, vous ne devriez avoir 1 Assert dans chaque test.
- Il y a beaucoup de valides cas où vous souhaitez peut-être plusieurs affirmations. Par exemple, disons que vous êtes en train de créer une collection de x objets. On peut soutenir que vous pouvez tester si la collection n'est pas nul d'abord, et ensuite qu'il a de x objets. Si votre test s'exécute sans la première case en place et la collecte n'est pas initialisé, vous obtiendrez une valeur null réf exception, ce qui peut être gênant.
Vous devez vous connecter pour publier un commentaire.
NUnit 3.6 ajoute
Assert.Multiple
méthode etMultipleAsserts
attribut.Voir https://github.com/nunit/docs/wiki/Multiple-Asserts.
Je préfère être pratique et de mettre plusieurs affirmations dans une méthode.
J'ai une classe helper qui permet à la syntaxe suivante (que j'utilise):
qui me donne des messages d'erreur comme ceci:
et la classe helper est le suivant:
Pas. Généralement, dans cette situation, vous devez mettre tout le code au-dessus de la affirme dans une méthode de configuration, puis d'écrire chaque affirmer dans son propre cas de test.
Non, vous ne pouvez pas le faire avec NUnit seul. Que vous avez à faire quelque chose comme @Konstantin Spirin dit. J'ai créé une petite extension que vous pouvez utiliser; il est appelé NUnit-GroupAssert. Il peut être trouvé ici: https://github.com/slvnperron/NUnit-GroupAssert
Comment l'utiliser:
il sera de sortie:
Vous pouvez tricher un peu et ne pas en fait échouer à un moment donné, mais plutôt la marque de l'échec, échec à la fin, quelque chose comme ce qui suit:
Je ne recommanderais pas cela, mais si vous avez besoin de le faire une fois ou deux fois, il ne devrait pas être mauvais.
Nope. Vous ne devriez pas vraiment plus qu'un faire valoir pour tester de toute façon, qui réduit la séparation et le rend plus difficile à trouver celui qui a échoué.
Si vous avez beaucoup de code qui doit exécuter avant de l'Affirmer, séparé dans une [SetUp] de la fonction, ou en faire une autre procédure.
Affirme jeté un NUnit.Cadre.AssertionException si elles échouent. Vous pourriez attraper cette exception sur le deuxième affirmer, d'évaluer la troisième assertion, puis re-lancer l'exception.
Pas quelque chose que je vous recommande, même si, pour les raisons indiquées par Ed Bécasse et Carl Manaster.
Vous pourriez restructurer votre test pour envelopper les assertions contenues dans le bloc try/catch et de garder une trace d'eux pour validation ultérieure. Je ne le recommande pas, cependant. Vous devez vraiment être à l'aide de tests distincts pour chaque état, si vous voulez être testés de façon indépendante.
J'ai réécrit Konstantin Spirin l'exemple de code en VB.