it-swarm.com.de

Verwenden Sie die NUnit Assert.Throws-Methode oder das ExpectedException-Attribut?

Ich habe herausgefunden, dass dies die zwei Hauptmethoden zum Testen von Ausnahmen sind:

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

[ExpectedException(typeof(Exception))]

Welches davon wäre das Beste? Bietet einer Vorteile gegenüber dem anderen? Oder ist es einfach eine Frage der persönlichen Vorlieben? 

133
SamuelDavis

Mit der ersten können Sie mit mehreren Anrufen auf mehrere Ausnahmen testen:

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

Mit der zweiten können Sie nur eine Ausnahme pro Testfunktion testen.

81
chue x

Der Hauptunterschied ist:

Das Attribut ExpectedException() führt den Test durch, wenn in der Testmethode eine Ausnahme in any auftritt.
Die Verwendung von Assert.Throws() ermöglicht die Angabe der exact-Stelle des Codes, an der eine Ausnahme erwartet wird.

NUnit 3.0 lässt die offizielle Unterstützung für ExpectedException vollständig fallen.

Daher bevorzuge ich definitiv die Assert.Throws()-Methode anstelle des ExpectedException()-Attributs.

241

Ich bevorzuge assert.throws, da ich damit andere Bedingungen überprüfen und geltend machen kann, nachdem die Ausnahme ausgelöst wurde.

    [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

Sie können auch den zu erwartenden Fehler stark eingeben (wie die alte Attrib-Version).

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

Wenn Sie eine ältere Version (<= 2.0) von NUnit verwenden, müssen Sie ExpectedException verwenden. 

Wenn Sie 2.5 oder eine neuere Version verwenden, können Sie Assert.Throw() verwenden.

https://github.com/nunit/docs/wiki/Breaking-Changes

Verwendung: https://www.nunit.org/index.php?p=exceptionAsserts&r=2.5

0
Gireesh k