我目前是 Moq 用户,我正在研究其他模拟框架。
在进行单元测试时,我经常调用 _mock.VerifyNoOtherCalls(),因此我可以确定除了我已经验证过的交互之外没有意外的交互。
我搜索了 FakeItEasy 文档,但在其框架中找不到等效选项。谁能建议我该怎么做?
最佳答案
严格的假货
FakeItEasy 支持 strict fakes (类似于 Moq 中的严格模拟):
var foo = A.Fake<IFoo>(x => x.Strict());
这会在进行意外调用时失败。
半严格的假货
也可以配置all calls directly :
A.CallTo(fakeShop).Throws(new Exception());
并将其与 specifying different behaviors for successive calls 结合起来,但是在这种情况下,与使用严格伪造相比,这样做没有任何好处,因为在调用未配置的方法时,严格伪造会提供更好的消息。所以如果你想配置某些方法被调用的次数有限,你可以
var fakeShop = A.Fake<IShop>(options => options.Strict());
A.CallTo(() => fakeShop.GetTopSellingCandy()).Returns(lollipop).Once();
A.CallTo(() => fakeShop.Address).Returns("123 Fake Street").Once();
fakeShop.GetTopSellingCandy()
和fakeShop.Address
可以调用一次,第二次会失败。
任意检查
如果你想检查在测试中的任意点是否没有调用:
A.CallTo(fakeShop).MustNotHaveHappened();
过滤掉一些可以在调试时执行的方法可能会更好:
A.CallTo(a)
.Where(call => call.Method.Name != "ToString")
.MustNotHaveHappened();
您不希望测试失败,因为您将鼠标悬停在变量上。
关于c# - Moq VerifyNoOtherCalls() 方法的 FakeItEasy 等价物是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53006106/