Rhinomocks–吼笑代表publicinterfaceIServiceInvoker{RInvokeService(FuncinvokeHandler)whereT:class;}publicclassMediaController:Controller{privateIServiceInvoker_serviceInvoker;publicMediaController(IServiceInvokerserviceInvoker){_serviceInvoker=serviceInvoker;}publicJsonResultGetAllMedia(){varmedia=_serviceInvoker.InvokeService(proxy=>proxy.GetAllMediaInJson());JsonResultjsonResult=newJsonResult();jsonResult.Data=媒体;jsonResult.JsonRequestBehavior=JsonRequestBehavior.AllowGet;返回jsonResult;}[TestClass]publicclassMediaControllerTests{[TestMethod]publicvoidGetAllMedia(){JsonResult数据;varserviceInvoker=MockRepository.GenerateStub();varmedia=CreateSeveralMedia();serviceInvoker.Stub(c=>c.InvokeService(p=>p.GetAllMediaInJson())).Return(media);数据=新的MediaController(sserviceInvoker).GetAllMedia();serviceInvoker.VerifyAllExpectations();断言.IsNotNull(数据);我正在存根服务并返回一个集合当我运行这个测试时,媒体是空的。有什么想法可以为这个模拟设定期望值吗?刚刚找到解决方案。看起来有点丑,但这是第一次迭代,可能很快就会有更优雅的版本。我的想法是创建另一个存根并匹配它的Func:我将为我的用例提供代码:[Theory]??[InlineData(342,31129,3456)]publicvoidshould_call_service_invoker_and_return_result(intnumber1,intnumber2,intexpected){var计算器=MockRepository.GenerateStub();计算器.Stub(_=>_.Add(number1,number2)).Return(expected);varserviceInvoker=MockRepository.GenerateStub>();serviceInvoker.Stub(_=>_.Invoke(Arg>.Matches(d=>d(calculator)==calculator.Add(number1,number2)))).Return(expected);varserviceConsumer=newServiceConsumer(serviceInvoker);varactual=serviceConsumer.GetAddResultFor(number1,number2);断言。等于(预期,实际);xUnit+扩展用作测试框架。请忽略Theory和InlineData的东西——这只是摆脱不必要的测试设置的另一种方法。这是SUT的代码:publicclassServiceConsumer{privatereadonlyServiceInvokerserviceInvoker;publicServiceConsumer(ServiceInvokerserviceInvoker){this.serviceInvoker=serviceInvoker;}publicintGetAddResultFor(intnumber1,intnumber2){returnserviceInvoker.Invoke(_=>_.Add(number1,number2));}}publicclassServiceInvoker{publicvirtualRInvoke(Funcfunc){thrownewNotImplementedException();}}publicinterfaceICalculator{intAdd(intnumber1,intnumber2);帮助。欢迎任何有关如何增加更多美感的建议:)单元测试中的Lambda编译为类级方法(单元测试中的方法)。在您的控制器中,不同的lambda编译为类级方法(在控制器内部)。单元测试中设置的存根与控制器中正在执行的存根不匹配,因此RhinoMocks返回默认值(null)。更多信息:http://groups.google.com/group/rhinomocks/browse_frm/thread/a33b165c16fc48ee?tvc=1以上是C#学习教程:Rhinomocks-mocking代表分享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: