web-dev-qa-db-fra.com

Utilisez la méthode NUnit Assert.Throws ou l'attribut ExpectedException?

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? 

133
SamuelDavis

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.

81
chue x

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().

241
Alexander Stepaniuk

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");

    }
33
Mike Parkhill

Vous pouvez également taper l'erreur que vous attendez (comme l'ancienne version d'attrib).

Assert.Throws<System.InvalidOperationException>(() => breakingAction())
9
Reverend Sfinks

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

0
Gireesh k