我正在努力更加熟悉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>();
}
答案 0 :(得分:4)
如果要验证测试代码的行为,您将使用具有适当期望的模拟,并验证。如果您只想传递可能需要以某种方式执行的值,但不是此测试的焦点,则将使用存根。