在RhinoMocks中重置模拟

时间:2011-04-20 08:25:21

标签: c# mocking rhino-mocks

我正在用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()的调用次数,以便只捕获重置后的调用?

3 个答案:

答案 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();