J'ai découvert que cela semble être les deux principaux moyens de tester les exceptions:
Assert.Throws<Exception>(()=>MethodThatThrows());
[ExpectedException(typeof(Exception))]
Lequel de ces serait le meilleur? Est-ce que l'un offre des avantages par rapport à l'autre? Ou est-ce simplement une question de préférence personnelle?
La première vous permet de tester plusieurs exceptions, avec plusieurs appels:
Assert.Throws(()=>MethodThatThrows());
Assert.Throws(()=>Method2ThatThrows());
La seconde ne vous permet de tester qu'une seule exception par fonction de test.
La principale différence est:
L'attribut ExpectedException()
rend le test réussi si une exception survient dans any place dans la méthode de test.
L’utilisation de Assert.Throws()
permet de spécifier exact
place du code où une exception est attendue.
NUnit 3.0 supprime totalement le support officiel pour ExpectedException
.
Donc, je préfère définitivement utiliser la méthode Assert.Throws()
plutôt que l'attribut ExpectedException()
.
Je préfère assert.throws car cela me permet de vérifier et d'affirmer d'autres conditions après la levée de l'exception.
[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 également taper l'erreur que vous attendez (comme l'ancienne version d'attrib).
Assert.Throws<System.InvalidOperationException>(() => breakingAction())
Si vous utilisez une version plus ancienne (<= 2.0) de NUnit
, vous devez utiliser ExpectedException
.
Si vous utilisez 2.5 ou une version ultérieure, 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