2012-11-30 12 views
14

В чем разница между носорогами и ожиданием здесь: Похоже, что они ведут себя точно так же?В чем разница между носорогами и ожиданием

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()); 

ответ

18

Stub() определяет поведение для загасил объекта.
Expect() определяет Поведение и Ожидание для издеваемого объекта.

Так что, если вам нужно проверить, что высмеивал метод был назван следует использовать Expect:

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

Теперь после того, как тест действия завершения вы можете проверить, что expectaions выполнены:

mockContext.VerifyAllExpectations(); 

Если вам нужно использовать метод метода заглушки, вы можете использовать Stub():

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

Ожидание() важно, чтобы разработчик мог поместить код для проверки ожидания. Положите, что .Find () функция удалена, то VerifyAllExpectations() может отслеживать это. Штук не может. Если вы не проверяете ожидания, вы можете просто использовать заглушку. –

2

Когда вы используете Expect для метода в этом случае x.Find(), если ваш метод не вызывается во время теста mockContext.VerifyAllExpectations(); не удастся.