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

标签 c# moq fakeiteasy

我目前是 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/

相关文章:

c# - 从一个委托(delegate)转换为另一个委托(delegate)。伪 Actor

tdd - 起订量和命令模式。我很挣扎,你能帮忙吗?

c# - CallBaseMethod () 是否适用于 FakeItEasy 中的虚拟属性?

fakeiteasy - 使用表达式树作为参数约束

linq - 定制匹配最小起订量

c# - FakeItEasy 找不到电话,尽管它在那里

c# - 动态添加WCF服务的引用

c# - 使用 QuickSort 按日历顺序对月份进行排序

c# - 我可以在 .NET Core 可执行文件中嵌入文件并在运行时读取它吗?

c# - 如何最小化返回 "this"的方法