我目前是Moq用户,正在研究其他模拟框架。
在进行单元测试时,我经常调用_mock.VerifyNoOtherCalls(),因此可以确定除了已经验证的交互之外,没有意外的交互。
我搜索了FakeItEasy文档,但在其框架中找不到等效的选项。谁能建议我该怎么做?
答案 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();
您不希望测试失败,因为您将鼠标悬停在变量上。