我想創建NUnit測試以確保我的函數不會拋出異常。是否有一些具體的方式來做到這一點,或者我應該只寫NUnit:測試沒有預期的異常
[Test]
public void noExceptionTest() {
testedFunction();
}
如果沒有引發異常,它會成功嗎?
我想創建NUnit測試以確保我的函數不會拋出異常。是否有一些具體的方式來做到這一點,或者我應該只寫NUnit:測試沒有預期的異常
[Test]
public void noExceptionTest() {
testedFunction();
}
如果沒有引發異常,它會成功嗎?
Assert.DoesNotThrow(() => { /* custom code block here*/});
或只是方法
Assert.DoesNotThrow(() => CallMymethod());
欲瞭解更多詳情,請參閱NUnit Exception Asserts
是的,沒有拋出異常 - >測試通過。如果沒有重新拋出try-catch塊,它也會通過。
你是正確的。如果有例外,測試將失敗。
除非指定
[ExpectedException(typeof(YourException)) ]
public void TestMethod()
{
...
}
或者像@sll說,您使用更具體的
Assert.DoesNotThrow
不引發異常是正常的行爲。您的測試將成功驗證不會拋出異常。
我覺得有一個單元測試邏輯相關的問題。 如果您希望在特定輸入下發生特定異常,則將其聲明爲預期的異常。如果您只是檢查您的函數是否正常工作,並且在此正確行爲期間不會出現異常,則只需編寫該函數,如果它引發任何異常,則測試將失敗。
另一方面,您的代碼似乎正常工作,只有檢查沒有例外可能不是單元測試的正確方法。在單元測試中,通常你會期望一些輸出(預期值),你有一些實際的輸出(實際值),你斷言預期值和實際值是相同的。
使用NUnit 3.0 Constraint Model類型斷言中代碼將如下所示:
Assert.That(() => SomeMethod(actual), Throws.Nothing);
此示例來自NUnit wiki服用。
這真的是你想測試的嗎?你確實意識到,如果testedFunction是無操作的,它將通過測試。 – Martijn 2012-03-21 11:38:53
你的方法是否有特別的要求不扔?或者它是否以我的代碼作品的精神完成,因爲它不會拋出*?如果後面的那個,你migth要檢查[那些](http://stackoverflow.com/questions/8788558/should-i-test-that-methods-dont-throw-exceptions)[two](http:// stackoverflow.com/questions/9417213/c-how-do-i-check-no-exception-occurred-in-my-unit-test)爲什麼一般你不這樣做。你從這樣的測試中獲得的東西很少。 – 2012-03-21 13:36:31
@jimmy_keen作爲一個例外情況,已經用於測試調用Dispose()第二次不會拋出 – Gareth 2014-11-12 13:59:38