在RhinoMocks中重置模拟

本文关键字:模拟 RhinoMocks | 更新日期: 2023-09-27 17:52:16

我正在用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()的调用计数,以便仅在重置后进行调用被捕获?

在RhinoMocks中重置模拟

我想@alexl提到的SO问题应该能帮到你。但我很好奇,在什么情况下,你的模拟是在你的Act阶段之外被调用的。这可能是对象之间耦合过紧的标志。

作为一种可能的解决方案,如果在Arrange阶段没有保存状态信息,您总是可以创建仅在Arrange阶段使用的IFoo的另一个模拟。

也许这篇文章可以帮助你:如何清除先前对对象的期望?

Mock.BackToRecord()将执行此操作

// 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();