Utilisez NUnit Assert.Méthode des lancements ou attribut ExpectedException?
j'ai découvert que ceux-ci semblent être les deux principaux moyens d'essais pour les exceptions:
Assert.Throws<Exception>(()=>MethodThatThrows());
[ExpectedException(typeof(Exception))]
lequel d'entre eux serait le meilleur? Doit-on offrir des avantages sur les autres? Ou est-ce simplement une question de préférence personnelle?
5 réponses
le premier vous permet de tester plus d'une exception, avec plusieurs appels:
Assert.Throws(()=>MethodThatThrows());
Assert.Throws(()=>Method2ThatThrows());
la seconde permet seulement de tester une exception par fonction de test.
la principale différence est:
L'attribut ExpectedException()
fait que l'essai est réussi si une exception se produit dans n'importe quel place dans la méthode d'essai.
L'utilisation de Assert.Throws()
permet de spécifier exact
lieu du code où l'exception est prévue.
NUnit 3.0 laisse tomber le soutien officiel pour ExpectedException
tout à fait.
donc, je préfère certainement utiliser la méthode Assert.Throws()
plutôt que l'attribut ExpectedException()
.
je préfère affirmer.lance car il me permet de vérifier et d'affirmer d'autres conditions après l'exception est lancée.
[Test]
[Category("Slow")]
public void IsValidLogFileName_nullFileName_ThrowsExcpetion()
{
// the exception we expect thrown from the IsValidFileName method
var ex = Assert.Throws<ArgumentNullException>(() => a.IsValidLogFileName(""));
// now we can test the exception itself
Assert.That(ex.Message == "Blah");
}
vous pouvez aussi taper fort l'erreur que vous attendez (comme l'ancienne version atrib).
Assert.Throws<System.InvalidOperationException>(() => breakingAction())
Si vous utilisez une version plus ancienne( <=2.0 ) de NUnit
, alors vous devez utiliser ExpectedException
.
si vous utilisez 2.5 ou une version plus récente, vous pouvez utiliser Assert.Throw()
https://github.com/nunit/docs/wiki/Breaking-Changes
comment utiliser: https://www.nunit.org/index.php?p=exceptionAsserts&r=2.5