2012-01-05 41 views
2

我想要更加熟悉Rhinomocks框架,並且我正在嘗試瞭解rhinomocks的期望方法。rhinomocks設置期望,單元測試總是通過

這裏是我寫一個單元測試:

[TestMethod] 
public void Create_ValidModelData_CreatesNewEventObjectWithGivenSlugId() 
{ 
    //Arrange 
    var eventList = new List<Event>() { new Event() { Slug = "test-user" } }; 

    _stubbedEventRepository.Stub(x => x.GetEvents()) 
     .Return(eventList); 

    _stubbedEventRepository 
     .Expect(x => x.SaveEvent(eventList.SingleOrDefault())) 
     .Repeat 
     .Once(); 

    var controller = new EventController(_stubbedEventRepository); 
    EventViewModel model = new EventViewModel(); 

    //Act 
    //controller.Create(model); COMMENTED OUT 

    //Assert 
    _stubbedEventRepository.VerifyAllExpectations(); 
} 

我想我明白這個代碼,如果SaveEvent(...)GET方法的調用一次只能通過。然而,用controller.Create(model)註釋掉,測試仍然通過。 Inside controller.Create(model)是SaveEvent()方法被調用的地方。

我試過如下:

_stubbedEventRepository 
    .Expect(x => x.SaveEvent(eventList.SingleOrDefault())); 

但它仍然通過每一次,所以我在做什麼不正確的堆棧溢出?我在網上看到的消息來源無法幫助我。爲什麼VerifyAllExpectations()產生一個成功的單元測試? 謝謝!

這裏的控制器構造函數體:

public EventController(IEventRepository eventRepository) 
{ 
    _eventRepository = eventRepository; 
} 

編輯:

// member variables 
private IEventRepository _stubbedEventRepository; 

    [TestInitialize] 
    public void SetupTests() 
    { 
     _stubbedEventRepository = MockRepository.GenerateStub<IEventRepository>(); 
    } 
+0

你是如何創建'_stubbedEventRepository'?你應該使用'MockRepository.GenerateMock ()'。 – vcsjones 2012-01-05 18:53:35

+0

已更新帖子以顯示我正在使用的內容,我使用的是不正確的GenerateStub,因爲我在stubbedRepository上聲明 – Short 2012-01-05 19:04:07

回答

4

如果您想驗證被測代碼的行爲,您將使用一個模擬與適當的期望,並驗證。如果您只想傳遞一個可能需要以某種方式行事的值,但不是此測試的重點,則您將使用存根。