从关于 SO 的许多其他问题中可以看出,为了重置对模拟对象进行方法调用的次数计数,您可以调用 BackToRecord(),然后调用 Replay()。
但是这对我不起作用。它会重置 stub 值,但不会重置方法调用计数。
因此从相关问题扩展一个示例...
public interface IFoo { string GetBar(); }
[TestMethod]
public void TestRhino()
{
var fi = MockRepository.GenerateStub<IFoo>();
fi.Stub(x => x.GetBar()).Return("A");
Assert.AreEqual("A", fi.GetBar());
fi.AssertWasCalled(x=>x.GetBar(), x=>x.Repeat.Once());
// Switch to record to clear behaviour and then back to replay
fi.BackToRecord(BackToRecordOptions.All);
fi.Replay();
fi.Stub(x => x.GetBar()).Return("B");
Assert.AreEqual("B", fi.GetBar());
fi.AssertWasCalled(x => x.GetBar(), x => x.Repeat.Once());
}
这在最后一行以“预期#1,实际#2”失败。
我是不是漏掉了重点,还是它根本不适用于方法计数?有没有办法在不创建新模拟的情况下实现这一目标?
由于我不会深入的原因,我无法在调用 GetBar() 之前设置期望值。
最佳答案
嗯,不是这样的;这是一个不寻常的用例。
这是一种选择:
[TestMethod]
public void TestRhino()
{
var getBarCount = 0;
var fi = MockRepository.GenerateStub<IFoo>();
fi.Stub(x => x.GetBar()).Return("A").WhenCalled(x => getBarCount++);
Assert.AreEqual("A", fi.GetBar());
Assert.AreEqual(1, getBarCount);
// Switch to record to clear behaviour and then back to replay
fi.BackToRecord(BackToRecordOptions.All);
fi.Replay();
getBarCount = 0;
fi.Stub(x => x.GetBar()).Return("B").WhenCalled(x => getBarCount++);
Assert.AreEqual("B", fi.GetBar());
Assert.AreEqual(1, getBarCount);
}
关于c# - 使用 Rhino Mocks,BackToRecord() 是否也应该清除方法被调用次数的计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8049943/