私は、これらが例外をテストする2つの主な方法であるように思われることを発見しました。
Assert.Throws<Exception>(()=>MethodThatThrows());
[ExpectedException(typeof(Exception))]
これらのどれが最適でしょうか?一方は他方よりも利点がありますか?それとも単に個人的な好みの問題ですか?
私は、これらが例外をテストする2つの主な方法であるように思われることを発見しました。
Assert.Throws<Exception>(()=>MethodThatThrows());
[ExpectedException(typeof(Exception))]
これらのどれが最適でしょうか?一方は他方よりも利点がありますか?それとも単に個人的な好みの問題ですか?
主な違いは次のとおりです。
ExpectedException()
属性は、テストメソッドのいずれかの場所で例外が発生した場合にテストに合格します。
の使用法により、例外が予想されるコードの場所Assert.Throws()
を指定できます。exact
NUnit 3.0は、公式サポートをExpectedException
完全に廃止します。
だから、私は間違いなく属性Assert.Throws()
よりもメソッドを使用することを好みます。ExpectedException()
1つ目は、複数の呼び出しを使用して、複数の例外をテストできます。
Assert.Throws(()=>MethodThatThrows());
Assert.Throws(()=>Method2ThatThrows());
2つ目は、テスト関数ごとに1つの例外のみをテストできます。
例外がスローされた後に他の条件を検証してアサートできるため、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");
}
予期しているエラーを強く入力することもできます(古い属性バージョンのように)。
Assert.Throws<System.InvalidOperationException>(() => breakingAction())
古いバージョン(<= 2.0)NUnit
を使用している場合は、を使用する必要がありますExpectedException
。
2.5以降のバージョンを使用している場合は、Assert.Throw()
https://github.com/nunit/docs/wiki/Breaking-Changes
使用方法: https ://www.nunit.org/index.php?p = exceptionAsserts&r = 2.5