2010-08-19 19 views
3

我在測試運行模擬器上第二次調用時遇到問題,所以我將雙重調用移入了測試方法。我有這樣的:Rhino mocks.Repeat.Any()對我不起作用

RefBundle mockIRefBundle = mocks.StrictMock<IRefBundle>(); 

Expect.Call(mockIRefBundle.MaxTrackItems).Return(6).Repeat.Any(); 

int q = mockIRefBundle.MaxTrackItems; 
int z = mockIRefBundle.MaxTrackItems; 

當我做第二次調用設置「Z」以暗示方法已經被稱爲異常它失敗:

錯誤消息:

System.InvalidOperationException: Previous method 
'IRefBundle.get_MaxTrackItems(); 
'requires a return value or an exception to throw.. 

和堆棧

Rhino.Mocks.Impl.RecordMockState.AssertPreviousMethodIsClose() 
Rhino.Mocks.Impl.RecordMockState.MethodCall(IInvocation invocation, 
... 

第二個電話似乎並沒有兌現Repeat.Any()

我錯過了什麼?

回答

3

要麼你必須使用新的語法:

RefBundle mockIRefBundle = MockRepository.GenerateMock<IRefBundle>(); 

mockIRefBundle.Expect(X => x.MaxTrackItems).Return(6).Repeat.Any(); 

int q = mockIRefBundle.MaxTrackItems; 
int z = mockIRefBundle.MaxTrackItems; 

或者您需要調用ReplayAll(),然後再開始使用你的嘲弄:

RefBundle mockIRefBundle = MockRepository.GenerateMock<IRefBundle>(); 

mockIRefBundle.Expect(X => x.MaxTrackItems).Return(6).Repeat.Any(); 

mocks.ReplayAll(); 
int q = mockIRefBundle.MaxTrackItems; 
int z = mockIRefBundle.MaxTrackItems; 
+0

謝謝 - 我發現犀牛文檔是非常混亂,所以我最終混合和匹配語法。你能推薦一個好的指南嗎? – ddm 2010-08-20 11:58:41

+0

嗨@ddm,我真的不知道任何好的指導:(很多練習+ stackoverflow我會說。 – Grzenio 2010-08-20 13:31:54

+0

謝謝@Grzenio - 我們會怎麼做沒有SO :-) – ddm 2010-08-21 00:14:46