2010-08-19 5 views
3

J'avais des problèmes avec un deuxième appel sur un simulacre dans mon test, donc j'ai déplacé les appels doubles dans la méthode de test. J'ai ceci:Rhino mocks .Repeat.Any() ne fonctionne pas pour moi

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

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

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

Il échoue quand je fais le deuxième appel pour régler « z » avec une exception qui implique la méthode a déjà été appelé:

Message d'erreur:

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

et Stack

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

le deuxième appel ne semble pas honorer la Repeat.Any()

Qu'est-ce qui me manque?

Répondre

3

Soit vous devez utiliser la nouvelle syntaxe:

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

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

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

ou bien vous devez appeler ReplayAll() avant de commencer vos travaux se moque:

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

Merci - Je trouve la documentation Rhino très confus, donc je finis par mélanger et assortir la syntaxe. Pouvez-vous recommander un bon guide? – ddm

+0

Salut @ddm, je ne connais pas vraiment de bons guides moi-même :(Beaucoup de pratique + stackoverflow je dirais – Grzenio

+0

Merci @Grzenio - que ferions-nous sans SO :-) – ddm