Assert.Throws
スローされた例外を返します。これにより、例外でアサートできます。
var ex = Assert.Throws<Exception>(() => user.MakeUserActive());
Assert.That(ex.Message, Is.EqualTo("Actual exception message"));
したがって、例外がスローされない場合、または間違ったタイプの例外がスローされた場合、最初のAssert.Throws
アサーションは失敗します。ただし、正しいタイプの例外がスローされた場合は、変数に保存した実際の例外をアサートできるようになりました。
このパターンを使用することで、例外メッセージ以外のことをアサートできます。たとえば、ArgumentException
および派生物の場合、パラメーター名が正しいことをアサートできます。
var ex = Assert.Throws<ArgumentNullException>(() => foo.Bar(null));
Assert.That(ex.ParamName, Is.EqualTo("bar"));
これらのアサーションを行うために流暢な API を使用することもできます。
Assert.That(() => foo.Bar(null),
Throws.Exception
.TypeOf<ArgumentNullException>()
.With.Property("ParamName")
.EqualTo("bar"));
または代わりに
Assert.That(
Assert.Throws<ArgumentNullException>(() =>
foo.Bar(null)
.ParamName,
Is.EqualTo("bar"));
例外メッセージでアサートするときのちょっとしたヒントは、テスト メソッドを で修飾しSetCultureAttribute
て、スローされたメッセージが予期されるカルチャを使用していることを確認することです。これは、例外メッセージをリソースとして保存してローカライズできるようにする場合に役立ちます。