2011-04-20 61 views
2

我正在用RhinoMocks编写NUnit测试。其中一个测试如下所示:在RhinoMocks中重置模拟

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

这感觉有点奇怪。为什么'mock.MyMethod()'在排列部分被多次调用?只是让我们更了解您的代码。 – 2016-05-17 13:30:50

回答

2

我觉得@ alexl引用真实SO问题应该帮助你。但我很好奇你在你的行为阶段之外被称为你的嘲笑的地方。这可能是你的物体之间耦合过紧的标志。

作为一种可能的解决方法,如果在编配期间没有保留状态信息,则始终可以创建仅在编配阶段使用的另一模拟IFoo

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