2011-04-15 68 views
0

我已經得到了我使用的PartialMock這樣爲什麼我PartialMock方法忽略了我的意料

1 IContextManager contextManager = mocks.StrictMock<IContextManager>(); 
2 target = mocks.PartialMock<EnumerationServiceBase>(new object[] { contextManager }); 
3 Expect.Call(delegate { contextManager.RemoveContext(guid); }); 
4 mocks.ReplayAll(); 
5 actual = target.ReleaseOp(request); 

target.ReleaseOp(請求)基類具有對contextManager.RemoveContext方法的調用我已經在第3行設置了期望,但我仍然收到以下錯誤

Rhino.Mocks.Exceptions.ExpectationViolationException:IContextManager.RemoveContext(「e04c757b-8b70-4294-b133-94fd6b52ba04」);預期#0,實際#1。

這是第一個測試中,這沒有奏效(其他45個很好),但這也是第一個使用A)部分模擬和B)模擬方法返回void 。有任何想法嗎?

回答

1

這是在其中該 沒有工作(另一45左右是 細)第一測試,但是這也是第一個 使用A)的局部模擬,和B)一種 返回void的模擬方法。任何 想法?

A)PartialMock意味着犀牛將攔截方法調用如果它具有在其上的期望。我認爲你的用法很好。 B)無效方法也不應該是一個問題。

最有可能的,你的問題是在您的期望:

Expect.Call(delegate { contextManager.RemoveContext(guid); }); 

的​​在你的期望必須是相同的實例,通過target傳遞的GUID。

試試這個:

Expect.Call(delegate { contextManager.RemoveContext(guid); }).IgnoreArguments(); 

// you can also use fluent syntax like this: 
// contextManager.Expect(x => x.RemoveContext(guid)).IgnoreArguments(); 

如果一切正常,你可以相當肯定您的測試GUID,並在課堂上使用的實際GUID不匹配。

+0

已經嘗試過。甚至改變它返回的東西,所以它不是無效的。我認爲contextManager(傳遞給PartialMock方法)沒有關聯到代理實例。我要創建一個屬性並明確地設置它來查看是否能解決它。 – sonicblis 2011-04-15 20:42:42

+0

明確設置它也不能解決問題。 = [ – sonicblis 2011-04-15 21:01:55

+0

原來即使我傳遞了null並且表示忽略參數(使用Guid的重載被註冊爲預期的方法),也會調用一個接受字符串的重載。實質上你是對的朱麗葉。我應該更仔細地檢查兩個參數中的字符串,而不是Guid。答案就是你。 – sonicblis 2011-04-16 13:30:02

相關問題