我正在做有序的期望在犀牛模擬中描述的由ayende在this後。我的代碼看起來像這樣:重複使用已驗證的模擬
using (_mocks.Ordered())
{
Expect.Call(() => _myMock.CallA());
Expect.Call(() => _myMock.CallB(40));
Expect.Call(() => _myMock.CallA());
}
_mocks.ReplayAll();
_myObjectUnderTest.DoStuff();
_mocks.VerifyAll();
在此之後,我想添加更多的期望和測試我的對象的更多方法。我想這樣做是因爲我有一些基本的測試方法可以在我的測試對象上做一些設置,我不想重新測試這個功能,所以我只是調用早期的測試方法。如果我在VerifyAll()後嘗試添加更多期望,我會得到一個異常:「當模擬對象處於已驗證狀態時,此操作無效。」
我的問題的一部分是我真的不明白什麼是所有的重播/驗證的東西在做什麼,我只是複製代碼。我使用嚴格的模擬,所以任何設置代碼都必須具有匹配的期望或失敗。我不想重複我的設置代碼的期望。
有沒有辦法重置模擬以準備好以某種方式重新開始?
問題出現在我想測試B時,但必須先調用A以便首先爲B設置所有內容。如果A在我的模擬上調用方法,那麼我必須期待它們,否則使用動態模擬而不是嚴格模擬。我想不要重複所有的期望,因爲我已經徹底地測試了A. – captncraig 2010-10-28 04:25:41
是的,我也有這個問題。你有兩個選擇。首先是修改業務邏輯,以便控制哪些部件被觸發,或者將業務邏輯分成獨立測試的較小部分。第二種選擇是將一些期望提升到你的'[TestFixture]'的私有方法,並在兩個測試中調用它。我做了最後一個(現在)。 – 2010-10-28 06:26:23
-1,因爲我有這個問題,但找到了解決方法,否定了這個答案(見其他帖子 - 「簡短回答:是」) – brewmanz 2014-11-04 21:29:23