在RhinoMocks中模拟lambda>(xasIEntity).ID==(entityasIEntity).ID).FirstOrDefault();有任何想法吗?在单元测试中,您拥有被测系统(SUT)及其协作者。模拟的目的是用你完全控制的东西代替合作者。通过这种方式,您可以设置不同的测试用例,并可以专注于测试被测系统的行为,而不是任何其他测试用例。在这种情况下,我假设rep对象是SUT。您传递给SUT的Find方法的lambda可以被视为协作者。既然您已经完全控制了lambda,那么尝试使用RhinoMocks模拟它就没有多大意义了。我将尝试给出一个涉及RhinoMocks和lambda的单元测试示例;-)这是一个示例测试,它创建一个始终返回false的谓词存根,并验证Find方法是否实际调用该谓词:[Test]publicvoidFind_returns_nothing_if_predicate_always_false(){varpredicateStub=MockRepository.GenerateStub>();predicateStub.Stub(x=>x(Arg.Is.Anything)).Return(false);varrepository=newRepository();varentities=repository.Find(predicateStub);Assert.AreEqual(0,entities.Count(),"哎呀,得到了结果,而predicate总是返回false");predicateStub.AssertWasCalled(x=>x(Arg.Is.Anything));}当然,像你自己的例子一样,其实并不需要RhinoMocks。lambda语法的要点是使提供就地实现变得容易:Funcpredicate=x=>{predicateCalled=true;返回假;};varrepository=newRepository();varentities=repository.Find(predicate);Assert.AreEqual(0,entities.Count(),"哎呀,得到了结果,而predicate总是返回false");Assert.IsTrue(predicateCalled,"糟糕,从未使用过谓词");}找到了我在repository.Expect(action=>action.Find(x=>x.ID==0)).IgnoreArguments().Return(entities).Repeat.Any();之后的答案这样我们就是出不来……因为IgnoreArguments(),它永远不会进去看到我们要传递的参数的值。但是这种方法的主要问题是无法编写AssertWasCalled(一些lambda表达式),因为现在在Assert部分显示错误,如ExpectaionViolationExceptionnothandledbyusercode以上是C#学习教程:mockinglambdainrhinomockingshare如果有用给你和你需要了解更多的C#学习教程,希望你多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
