我正在用RhinoMocks编写NUnit测试。其中一项测试如下:
mock = MockRepository<IFoo>.CreateMock();
// Arrange
// During the Arrange part, mock.MyMethod() gets called several times.
// Act
// During the Act part, mock.MyMethod() should be called exactly once.
// Assert
mock.AssertWasCalled(x => x.MyMethod()).Repeat.Once();
当然这会失败,因为MyMethod()被多次调用。
有没有办法可以在Act部分之前重置MyMethod()的调用次数,以便只捕获重置后的调用?
答案 0 :(得分:2)
我认为@ alexl引用的SO问题可以帮助你。但是我很好奇你在测试的行动阶段之外调用你的模拟的情况。这可能是您的对象之间过于紧密耦合的迹象。
作为一种可能的解决方法,如果在编配期间没有保留状态信息,您可以随时创建另一个仅在编配阶段使用的IFoo
模拟。
答案 1 :(得分:0)
也许这篇文章可以帮到你:How to clear previous expectations on an object?
Mock.BackToRecord()将执行此操作
答案 2 :(得分:0)
// Arrange
// During the Arrange part, mock.MyMethod() gets called several times.
var mockRep = new MockRepository();
var mock = mockRep.dynamicMock<IFoo>();
Expect.Call(mock.MyMethod()).Return("desired result").Repeat.Time("count");
mock.Replay()
// Act
//test go here
// Assert
mock.AssertWasCalled(x => x.MyMethod()).Repeat.Once();