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?

130
demandé sur DavidRR 2013-02-22 03:52:45

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.

77
répondu chue x 2013-02-21 23:59:53

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

237
répondu Alexander Stepaniuk 2015-11-18 08:51:48

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

    }
32
répondu Mike Parkhill 2016-12-04 02:19:10

vous pouvez aussi taper fort l'erreur que vous attendez (comme l'ancienne version atrib).

Assert.Throws<System.InvalidOperationException>(() => breakingAction())
9
répondu Reverend Sfinks 2015-11-24 12:23:41

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

0
répondu Gireesh k 2017-03-22 09:13:58