2012-11-30 82 views
14

rhino-mocks存根和期望在這裏有什麼區別:在我看來他們的表現完全一樣嗎?rhino-mocks存根和期望有什麼區別

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

Expect()非常重要,因此開發人員可以將代碼驗證期望值。找到。找到()函數被刪除,然後VerifyAllExpectations()可以跟蹤它。存根不能。 如果您未驗證期望值,則可以使用存根。 –

2

當您在此案例中使用Expect作爲方法時x.Find(),如果在測試期間未調用您的方法mockContext.VerifyAllExpectations();將失敗。