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

一个人想着一个人 提交于 2019-12-10 18:24:39

问题


I'm currently a Moq user and I'm researching other mocking frameworks.

When unit testing I frequently call _mock.VerifyNoOtherCalls() so I can be certain there are no unexpected interactions beyond the ones that I have already verified.

I've searched the FakeItEasy docs and cannot find the equivalent option in their framework. Can anyone suggest how I might do this?


回答1:


Strict fakes

FakeItEasy supports strict fakes (similar to strict mocks in Moq):

var foo = A.Fake<IFoo>(x => x.Strict());

This will fail the moment an unexpected call is made.

Semi-strict fakes

It is also possible to configure all calls directly:

A.CallTo(fakeShop).Throws(new Exception());

and combine this with specifying different behaviors for successive calls, however in this case, there's no benefit to doing so over using a strict fake, as a strict fake will give better messages when unconfigured methods are called. So if you want to configure some methods to be called a limited number of times, you could

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() and fakeShop.Address can be called once, the second time it will fail.

Arbitrary checks

If you want to check if no calls are made at arbitrary points in the test:

A.CallTo(fakeShop).MustNotHaveHappened();

It might be better to filter out some of the methods that can be executed while debugging:

A.CallTo(a)
 .Where(call => call.Method.Name != "ToString")
 .MustNotHaveHappened();

You don't want a failing test because you hovered over the variable.



来源:https://stackoverflow.com/questions/53006106/what-is-the-fakeiteasy-equivalent-of-the-moq-verifynoothercalls-method

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!