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