2012-07-16 32 views
0

實施現狀:爲什麼模擬方法會吞噬異常?

void IFileManager.DeleteFile(
    string argFilename) 
{ 
    throw new ArgumentException("Specified filename was not found"); 
} 

單元測試

Expect.Once.On(m_MockFileManager).Method("DeleteFile"); 
.... 
.... 

的單元測試通過,所有的綠色。我期望測試失敗,因爲應該拋出異常。當我在不使用模擬框架的情況下運行此測試時,會拋出異常並且測試失敗。

爲什麼模擬框架吞下異常?

+0

什麼模擬/單元測試框架?測試方法中是否有某種'[ExpectedException]'屬性? – 2012-07-16 17:09:10

+0

@ChrisSinclair - nmock2 – 2012-07-16 17:10:58

+0

當你說「當前實現」時,你究竟是什麼意思?這是你放在你的假對象,還是真正的實現?在大多數嘲笑框架中,你的嘲笑方法在你告訴它該做什麼之前什麼都不做,它只是一個空的方法。 – 2012-07-16 19:37:03

回答

0

您可能需要提供比這一行更多的代碼,但我的猜測是您正在嘲笑調用DeleteFile的對象,並且實際上並沒有調用DeleteFile方法。只要代碼調用該方法,那麼你的代碼就會通過。再次,你的代碼的更完整的圖片將允許更好的答案。

+0

因此,如果在我的測試方法(不是您指出的DeleteFile)中的任何方法調用出現問題(例外),那麼我基本上是SOL?例如,如果我在被測方法內部調用了10種不同的方法,並且這10種方法中只有一種爆炸了,我就不知道了嗎? – 2012-07-16 17:20:02

+0

那麼,如果你期待DeleteFile接着另一個調用,那麼不應該調用另一個方法,因爲異常會使方法短路。我不知道nmock2的實現,所以這可能不同 – 2012-07-16 17:22:46

+0

就是這樣,所有10個方法都被調用,即使中間有一個方法會引發異常。我只能猜測,模擬框架基於具有空體的接口創建了一個DeleteFile的新實例,因此它甚至不使用與實際代碼相同的實現。 – 2012-07-16 17:29:08