2012-03-21 83 views
41

我想創建NUnit測試以確保我的函數不會拋出異常。是否有一些具體的方式來做到這一點,或者我應該只寫NUnit:測試沒有預期的異常

[Test] 
public void noExceptionTest() { 
    testedFunction(); 
} 

如果沒有引發異常,它會成功嗎?

+2

這真的是你想測試的嗎?你確實意識到,如果testedFunction是無操作的,它將通過測試。 – Martijn 2012-03-21 11:38:53

+0

你的方法是否有特別的要求不扔?或者它是否以我的代碼作品的精神完成,因爲它不會拋出*?如果後面的那個,你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

+1

@jimmy_keen作爲一個例外情況,已經用於測試調用Dispose()第二次不會拋出 – Gareth 2014-11-12 13:59:38

回答

70
Assert.DoesNotThrow(() => { /* custom code block here*/}); 

或只是方法

Assert.DoesNotThrow(() => CallMymethod()); 

欲瞭解更多詳情,請參閱NUnit Exception Asserts

2

是的,沒有拋出異常 - >測試通過。如果沒有重新拋出try-catch塊,它也會通過。

2

你是正確的。如果有例外,測試將失敗。

除非指定

[ExpectedException(typeof(YourException)) ] 
public void TestMethod() 
{ 
    ... 
} 

或者像@sll說,您使用更具體的

Assert.DoesNotThrow 

assertion

4

不引發異常是正常的行爲。您的測試將成功驗證不會拋出異常。

1

我覺得有一個單元測試邏輯相關的問題。 如果您希望在特定輸入下發生特定異常,則將其聲明爲預期的異常。如果您只是檢查您的函數是否正常工作,並且在此正確行爲期間不會出現異常,則只需編寫該函數,如果它引發任何異常,則測試將失敗。

另一方面,您的代碼似乎正常工作,只有檢查沒有例外可能不是單元測試的正確方法。在單元測試中,通常你會期望一些輸出(預期值),你有一些實際的輸出(實際值),你斷言預期值和實際值是相同的。