Moq VerifyNoOtherCalls()方法的FakeItEasy等效项是什么

时间:2018-10-26 09:55:14

标签: c# moq fakeiteasy

我目前是Moq用户,正在研究其他模拟框架。

在进行单元测试时,我经常调用_mock.VerifyNoOtherCalls(),因此可以确定除了已经验证的交互之外,没有意外的交互。

我搜索了FakeItEasy文档,但在其框架中找不到等效的选项。谁能建议我该怎么做?

1 个答案:

答案 0 :(得分:4)

严格的假货

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();

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