rhinomocks设定期望,单位测试总是通过

时间:2012-01-05 18:50:47

标签: c# unit-testing rhino-mocks

我正在努力更加熟悉Rhinomocks框架,我正在尝试理解rhinomocks的Expect方法。

这是我写过的单元测试:

[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(...)方法被调用一次时才会通过。但是,在controller.Create(model)注释掉的情况下,测试仍然通过。在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>();
    }

1 个答案:

答案 0 :(得分:4)

如果要验证测试代码的行为,您将使用具有适当期望的模拟,并验证。如果您只想传递可能需要以某种方式执行的值,但不是此测试的焦点,则将使用存根。