我完全是C#和NUnit的新手。NUnit的ExpectedExceptionAttribute是測試是否引發異常的唯一方法嗎?
在Boost.Test中有一個BOOST_*_THROW
宏的家族。在Python的測試模塊中有TestCase.assertRaises
方法。
據我所知,在NUnit(2.4.8)的C#中,唯一的異常測試方法是使用ExpectedExceptionAttribute
。
爲什麼我更喜歡ExpectedExceptionAttribute
- 比如說 - Boost.Test的方法?這個設計決定背後有什麼推理?爲什麼在C#和NUnit的情況下更好?
最後,如果我決定使用ExpectedExceptionAttribute
,那麼在異常被引發和捕獲之後,如何做一些額外的測試?假設我想測試要求,在某個setter提出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());
}
編輯:謝謝您的回答。今天,我發現了一個這是測試blog entry其中提到你所描述的所有三種方法(和一個更小的變化)。這是恥辱,我不能:-(之前找到它
+1。我更喜歡使用這種風格,因爲編寫測試所需的儀式較少,尤其是如果您需要保留對檢查消息等的引用。您還可以使用var exception = Assert.Throws(()=> myInstance.DoSomethingInvalid( )); –
2010-06-27 02:35:30