我是 C# 和 NUnit 的新手。
在 Boost.Test 中有一系列BOOST_*_THROW
宏。在 Python 的测试模块中有TestCase.assertRaises
方法。
据我了解,在带有 NUnit(2.4.8)的 C# 中,进行异常测试的唯一方法是使用ExpectedExceptionAttribute
.
为什么我更喜欢ExpectedExceptionAttribute
——比如说——Boost.Test 的方法?这个设计决策背后的原因是什么?为什么在 C# 和 NUnit 的情况下会更好?
最后,如果我决定使用ExpectedExceptionAttribute
,在引发和捕获异常后如何进行一些额外的测试?假设我想测试要求,说对象在一些 setter raise 之后必须是有效的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 博客条目,其中提到了您描述的所有三种方法(以及一个较小的变化)。很遗憾我之前找不到它:-(。