有谁能告诉我为什么世界上下面的测试没有失败?
[Test]
public void uhh_what() {
var a = MockRepository.GenerateMock<IPrebuiltNotifier>();
a.Expect(x => x.Notify()).Repeat.Once();
a.Notify();
a.Notify();
a.VerifyAllExpectations();
}
真的需要第二双眼睛来确认我并不疯狂......现在我担心我的所有测试都不可靠。
答案 0 :(得分:25)
已经有thread on the RhinoMocks group。
GenerateMock创建一个动态模拟。动态模拟允许未指定的调用(=预期)。如果发生这种情况,它只返回null(或返回类型的默认值)。
注意:重复是行为的规范(如Stub),而不是期望,即使在期望中指定。
如果您想避免拨打一定数量的电话,可以写下:
[Test]
public void uhh_what()
{
var a = MockRepository.GenerateMock<IPrebuiltNotifier>();
a.Expect(x => x.Notify()).Repeat.Once();
a.Stub(x => x.Notify()).Throw(new InvalidOperationException("gotcha"));
a.Notify();
// this fails
a.Notify();
a.VerifyAllExpectations();
}
或者
[Test]
public void uhh_what()
{
var a = MockRepository.GenerateMock<IPrebuiltNotifier>();
a.Notify();
a.Notify();
// this fails
a.AssertWasCalled(
x => x.Notify(),
o => o.Repeat.Once());
}
答案 1 :(得分:9)
使用GenerateMock(或一般使用Dynamic Mocks)时,我总是在心理上插入以下内容:
a.Expect(x =&gt; x.Notify())。重复。 * [至少] *一次();