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