Order方法使用Rhino-MockStub返回值我在阅读RoyOsherove的单元测试艺术时开始尝试使用Rhino-Mocks(3.6)。他有一个示例,演示模拟方法可以编写脚本以在使用相同参数调用两次时返回不同的结果:[Test]publicvoidReturnResultsFromMock(){IGetRestulsresultGetter=repository.DynamicMock();using(repository.Record()){resultGetter.GetSomeNumber("a");LastCall.Return(1);resultGetter.GetSomeNumber("a");LastCall.Return(2);resultGetter.GetSomeNumber("b");LastCall.Return(3);}intresult=resultGetter.GetSomeNumber("b");Assert.AreEqual(3,结果);intresult2=resultGetter.GetSomeNumber("a");Assert.AreEqual(1,result2);intresult3=resultGetter.GetSomeNumber("a");Assert.AreEqual(2,result3);这很好用。但是,当我尝试使用存根和接受并返回字符串的方法进行相同操作时,我无法生成第二个返回值:IMessageProvider存根=模拟。存根();使用(mocks.Record()){stub.GetMessageForValue("a");LastCall.Return("第一次通话");stub.GetMessageForValue("a");LastCall.Return("第二次通话");}Assert.AreEqual("第一次调用",stub.GetMessageForValue("a"));Assert.AreEqual("第二次调用",stub.GetMessageForValue("a"));}}publicinterfaceIMessageProvider{stringGetMessage();字符串GetMessageForValue(字符串值);}此测试失败,因为两次调用都收到了“FirstCall”。我尝试了几种语法错误(使用mocks.Ordered()、SetResult、Expect等),但仍然无法获得第二个结果。我做错了什么,或者这是Rhino-Mocks的限制?我看过这篇博文,但建议的语法并没有解决我的问题。你缺少的是告诉存根第一个值应该只返回一次:...using(mocks.Record()){stub.GetMessageForValue("a");LastCall.Return("第一次通话").Repeat.Once();stub.GetMessageForValue("a");LastCall.Return("第二次通话");}当然,除非你对Repeat施加其他限制,否则你的“secondcall”真正的意思是“secondcallorfollow-upcall”。您还可以考虑使用RhinoMocks现在提供的更新的Arrange,Act,Assert(AAA)语法:stub.Expect(mp=>mp.GetMessageForValue("a")).Return("Firstcall").Repeat.Once();stub.Expect(mp=>mp.GetMessageForValue("a")).Return("第二次通话");Assert.AreEqual("第一次调用",stub.GetMessageForValue("a"));Assert.AreEqual("第二次调用",stub.GetMessageForValue("a"));它更简洁一些,通常使您不必担心存根日志记录-回放-断言状态。DerickBailey写了一篇关于在LosTechies使用Repeat的文章。它也恰好使用AAA语法)。如果你正在使用存根,我认为使用Expect是不合适的,因为你不需要expect,而是替换你的依赖项。所以我相信如果大家使用stub语法会更有意义:以上就是C#学习教程:OrderMethodusesRhino-MockStubReturnValue分享给大家,如果对大家有用需要进一步了解C#学习教程,希望大家多多关注——stub.Stub.(s=>s.GetMessageForValue("a")).Return("Firstcall").Repeat.Once();stub.Stub.(s=>s.GetMessageForValue("a")).Return("第二次调用").Repeat.Any;本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
