CodeGo.net>与犀牛嘲笑应BackToRecord()还清除计数的方法被称为次数?
作者:互联网
关于SO的其他许多问题,据说为了重置对模拟对象进行方法调用的次数计数,可以先调用BackToRecord(),再调用Replay().
但是,这对我不起作用.它将重置存根值,但不重置方法调用计数.
因此,从相关问题中扩展示例…
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 来源: https://codeday.me/bug/20191102/1988223.html