当前位置: 首页 > 编程语言 > C#

使用Moq模拟一个Func构造函数参数并验证它被调用了两次Share

时间:2023-04-10 12:52:47 C#

使用Moq模拟一个Func构造函数参数并验证它被调用两次调整它,因为答案不正确。公共类FooBar{私人Func__fooBarProxyFactory;publicFooBar(FuncfooBarProxyFactory){_fooBarProxyFactory=fooBarProxyFactory;}publicvoidProcess(){_fooBarProxyFactory();_fooBarProxyFactory();被调用两次。当试图模拟函数时varfuncMock=newMock();Moq抛出异常,因为Func类型不可模拟。问题是,如果不模拟函数,就不可能验证该函数是否被调用(n)次。funcMock.Verify((),Times.AtLeast(2));我认为没有必要对Func使用mock。您可以自己创建一个简单的Func,它返回IFooBarProxy的模拟:intnumberOfCalls=0;Funcfunc=()=>{++numberOfCalls;返回新模拟();};varsut=newFooBar(func);sut.Process();Assert.Equal(2,numberOfCalls);至少从Moq4.5.28开始,您可以像您期望的那样模拟和验证Func。我不知道这个功能是什么时候添加的(根据最初的问题,在某些时候这不起作用)。[测试]publicvoidTestFoobar(){varfuncMock=newMock>();varfooBar=newFooBar(funcMock.Object);fooBar.Process();funcMock.Verify(x=>x(),Times.AtLeast(2));由于Moqv4.1.1308.2120在提出此问题后几个月发布(2013年8月21日),因此添加了模拟Func的Func。因此,对于任何当前版本的模拟,您都可以使用varfuncMock=newMock>();.原始(过时)答案如果您有很多回调Func、Actions等,最好在测试中定义一个辅助接口并模拟该接口。这样您就可以使用常规的Moq功能,例如设置返回值、测试输入参数等。}用法以上是C#学习教程:使用Moq模拟Func构造函数参数,验证是否被调用了两次。分享所有内容,如果对大家有用,需要进一步了解C#希望大家多多关注教程——vartestMethodsMock=newMock();testMethodsMock.Setup(x=>x.FooBarProxyFactory()).Returns(newMock());varsut=newFooBar(testMethodsMock.Object.FooBarProxyFactory);testMethodsMock.Verify(x=>x.FooBarProxyFactory(),Times.Exactly(2));本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: