164 votes

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

J'ai découvert que ce sont les deux principales façons de tester les exceptions :

Assert.Throws<Exception>(()=>MethodThatThrows());

[ExpectedException(typeof(Exception))]

Laquelle de ces options serait la meilleure ? L'une offre-t-elle des avantages par rapport à l'autre ? Ou s'agit-il simplement d'une question de préférence personnelle ?

269voto

La principale différence est :

ExpectedException() fait passer le test si une exception se produit dans cualquier place dans la méthode d'essai.
L'utilisation de Assert.Throws() permet d'indiquer exact l'endroit du code où l'exception est attendue.

NUnit 3.0 abandonne le support officiel pour ExpectedException tout à fait.

Donc, je préfère nettement utiliser Assert.Throws() plutôt que ExpectedException() attribut.

108voto

chue x Points 11202

La première vous permet de tester plusieurs exceptions, avec des appels multiples :

Assert.Throws(()=>MethodThatThrows());
Assert.Throws(()=>Method2ThatThrows());

La seconde ne vous permet de tester qu'une seule exception par fonction de test.

48voto

Mike Parkhill Points 2735

Je préfère assert.throws car il 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()
    {
        var a = new MyTestObject();

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

    }

12voto

Reverend Sfinks Points 11

Vous pouvez aussi taper fortement l'erreur que vous attendez (comme dans l'ancienne version d'attribut).

Assert.Throws<System.InvalidOperationException>(() => breakingAction())

1voto

Gireesh k Points 11

Si vous utilisez une ancienne version( <=2.0 ) de NUnit alors 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 l'utiliser : https://www.nunit.org/index.php?p=exceptionAsserts&r=2.5

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X