私は C# と NUnit の初心者です。
Boost.Test には、BOOST_*_THROW
マクロのファミリがあります。Python のテスト モジュールにはTestCase.assertRaises
メソッドがあります。
私が理解している限り、NUnit (2.4.8) を使用した C# では、例外テストを行う唯一の方法は を使用することExpectedExceptionAttribute
です。
ExpectedExceptionAttribute
Boost.Testのアプローチよりも優先する必要があるのはなぜですか? この設計上の決定の背後には、どのような理由が考えられるでしょうか? C# と NUnit の場合、なぜそれが優れているのでしょうか?
最後に、使用することにした場合ExpectedExceptionAttribute
、例外が発生してキャッチされた後に追加のテストを行うにはどうすればよいですか? セッターが発生した後にオブジェクトが有効でなければならないという要件をテストしたいとしましょうSystem.IndexOutOfRangeException
。次のコードをコンパイルして期待どおりに動作させるには、どのように修正しますか?
[Test]
public void TestSetterException()
{
Sth.SomeClass obj = new SomeClass();
// Following statement won't compile.
Assert.Raises( "System.IndexOutOfRangeException",
obj.SetValueAt( -1, "foo" ) );
Assert.IsTrue( obj.IsValid() );
}
編集:回答ありがとうございます。今日、It's the Tests ブログ エントリで、あなたが説明した 3 つの方法すべて (およびもう 1 つの小さなバリエーション) が言及されているのを見つけました。以前は見つけられなかったのが残念です:-(。