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

The*_*ace 3 c# moq fakeiteasy

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

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

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

Jer*_*oen 5

严格的假货

FakeItEasy支持严格的伪造品(类似于Moq中的严格模拟):

var foo = A.Fake<IFoo>(x => x.Strict());
Run Code Online (Sandbox Code Playgroud)

如果发生意外呼叫,此操作将失败。

半严格的假货

也可以直接配置所有呼叫

A.CallTo(fakeShop).Throws(new Exception());
Run Code Online (Sandbox Code Playgroud)

并结合为连续调用指定不同的行为,但是在这种情况下,这样做比使用严格的伪造没有任何好处,因为在调用未配置的方法时,严格的伪造会提供更好的消息。因此,如果您希望将某些方法配置为有限次数,则可以

var fakeShop = A.Fake<IShop>(options => options.Strict());
A.CallTo(() => fakeShop.GetTopSellingCandy()).Returns(lollipop).Once();
A.CallTo(() => fakeShop.Address).Returns("123 Fake Street").Once();
Run Code Online (Sandbox Code Playgroud)

fakeShop.GetTopSellingCandy()并且fakeShop.Address可以调用一次,第二次它将失败。

任意支票

如果要检查测试中的任意点是否没有呼叫:

A.CallTo(fakeShop).MustNotHaveHappened();
Run Code Online (Sandbox Code Playgroud)

最好过滤掉一些在调试时可以执行的方法:

A.CallTo(a)
 .Where(call => call.Method.Name != "ToString")
 .MustNotHaveHappened();
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢。我并不完全确定我的例子是正确的。这看起来更好! (2认同)