2011-11-15 78 views
2

我有一個控制器方法,如果通過ID列表循環未找到指定的ID,則會引發自定義異常,否則返回部分視圖。Moq - 測試控制器方法拋出異常

我已經完成了測試,看看它是否成功地返回了部分視圖,但是如何測試該方法失敗並引發了自定義異常?

回答

10

你可以做一個簡單的try/catch並執行Assert.Fail如果你不會捕獲預期的異常。但是,大多數單元測試框架提供了一種自動測試異常的方法。

微軟的MSTest的具有ExpectedException屬性,它可以應用到測試方法:

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

如果上面的測試方法確實拋出一個ArgumentNullException,MSTest的將標誌着試驗的失敗。

NUnit具有更細化的Assert.Throws,它使您能夠更準確地控制測試方法中預期發生異常的位置。

+0

在MS Test中我不能Assert.Throws()總是令我惱火。我的解決方案是編寫一個ExtendedAssert庫,它爲異常類型提供一個通用參數。 –

+0

非常感謝Patrick。 –