Moq VerifyNoOtherCalls() 方法的 FakeItEasy 等价物是什么

What is the FakeItEasy equivalent of the Moq VerifyNoOtherCalls() method

我目前是 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();

您不希望测试失败,因为您将鼠标悬停在变量上。