160

私は、これらが例外をテストする2つの主な方法であるように思われることを発見しました。

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

[ExpectedException(typeof(Exception))]

これらのどれが最適でしょうか?一方は他方よりも利点がありますか?それとも単に個人的な好みの問題ですか?

4

5 に答える 5

266

主な違いは次のとおりです。

ExpectedException()属性は、テストメソッドのいずれかの場所で例外が発生した場合にテストに合格します。
の使用法により、例外が予想されるコードの場所Assert.Throws()を指定できます。exact

NUnit 3.0は、公式サポートをExpectedException完全に廃止します。

だから、私は間違いなく属性Assert.Throws()よりもメソッドを使用することを好みます。ExpectedException()

于 2013-02-23T18:01:27.977 に答える
100

1つ目は、複数の呼び出しを使用して、複数の例外をテストできます。

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

2つ目は、テスト関数ごとに1つの例外のみをテストできます。

于 2013-02-21T23:59:53.100 に答える
46

例外がスローされた後に他の条件を検証してアサートできるため、assert.throwsを使用します。

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

    }
于 2013-02-22T00:02:51.430 に答える
12

予期しているエラーを強く入力することもできます(古い属性バージョンのように)。

Assert.Throws<System.InvalidOperationException>(() => breakingAction())
于 2015-11-24T12:23:41.370 に答える
1

古いバージョン(<= 2.0NUnitを使用している場合は、を使用する必要がありますExpectedException

2.5以降のバージョンを使用している場合は、Assert.Throw()

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

使用方法: https ://www.nunit.org/index.php?p = exceptionAsserts&r = 2.5

于 2017-03-22T06:38:11.113 に答える