2012-11-30 89 views
14

Qual è la differenza tra lo stoppino dei rinoceronti e ci si aspetta qui: Mi sembra che si comportino esattamente allo stesso modo?Qual è la differenza tra lo stoppino di rinoceronte e aspettarsi

mockContext.Stub(x => x.Find<Blog>()) 
    .Return(new List<Blog>() 
    { 
     new Blog() { Id = 1, Title = "Test" } 
    }.AsQueryable()); 

mockContext.Expect(x => x.Find<Blog>()) 
    .Return(new List<Blog>() 
    { 
     new Blog(){Id = 1,Title = "Title"}, 
     new Blog(){Id=2,Title = "no"} 
    }.AsQueryable()); 

risposta

18

Stub() definisce il comportamento per oggetto stubbed.
Expect() definisce il comportamento e l'aspettativa per oggetto deriso.

Quindi, se avete bisogno di controllare che il metodo preso in giro è stato chiamato si dovrebbe usare Expect:

var mockContext = MockRepository.GenerateMock<IContext>(); 
mockContext.Expect(x => x.Find<Blog>()).Return(new List<Blog>()); 

Ora, dopo prova di azione completare si è in grado di verificare che expectaions sono soddisfatte:

mockContext.VerifyAllExpectations(); 

Se è necessario il comportamento del metodo di stub, è possibile utilizzare Stub():

var mockContext = MockRepository.GenerateStub<IContext>(); 
mockContext.Stub(x => x.Find<Blog>()).Return(new List<Blog>()); 
+0

Expect() è importante in modo che lo sviluppatore possa inserire il codice per verificare l'aspettativa. In caso contrario, la funzione () viene rimossa, quindi VerifyAllExpectations() può tenerne traccia. Stub non può. Se non stai verificando le aspettative, puoi semplicemente usare lo stub. –

2

Quando si utilizza Expect per un metodo in questo caso x.Find(), se il metodo non viene chiamato durante il test mockContext.VerifyAllExpectations(); avrà esito negativo.