【发布时间】:2012-01-05 18:50:46
【问题描述】:
我正在尝试更加熟悉 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>();
}
【问题讨论】:
-
你是如何创建
_stubbedEventRepository的?你应该使用MockRepository.GenerateMock<T>()。 -
更新了帖子以显示我正在使用的内容,我使用的是不正确的 GenerateStub,因为我在 stubbedRepository 上断言
标签: c# unit-testing rhino-mocks