我显然很困惑 - 这是我用其他几个框架完成的任务(NMock,Moq,FakeItEasy).我有一个函数调用我想要存根.函数调用具有out参数(对象).
函数调用位于代码中多次调用的用例中.调用代码传递参数,包括out参数的NULL对象.我想根据提供的其他参数设置一个预期的OUT参数.
如何指定NULL的预期入境输出参数,并在预期的出站填充我期望的方式对象的输出参数?我已经尝试了六种方式到星期天,到目前为止还没有能够得到任何回报,但我的OUTBOUND out参数为NULL.
Phi*_*ler 21
来自http://ayende.com/wiki/Rhino+Mocks+3.5.ashx#OutandRefarguments:
Ref和out参数是特殊的,因为您还必须使编译器满意.关键字ref和out是强制性的,你需要一个字段作为参数.Arg不会让你失望:
Run Code Online (Sandbox Code Playgroud)User user; if (stubUserRepository.TryGetValue("Ayende", out user)) { //... } stubUserRepository.Stub(x => x.TryGetValue( Arg.Is("Ayende"), out Arg<User>.Out(new User()).Dummy)) .Return(true);out是编译器的强制要求.Arg.Out(new User())是我们的重要部分,它指定out参数应返回新的User().Dummy只是指定类型User的一个字段,以使编译器满意.
小智 6
如果使用存储库生成Mock/Stub
checkUser = MockRepository.GenerateMock<ICheckUser>
Run Code Online (Sandbox Code Playgroud)
您可以使用out参数设置期望值
checkUser
.Expect(c => c.TryGetValue(Arg.Is("Ayende"), out Arg<User>.Out(new User()).Dummy)
.Return(true)
Run Code Online (Sandbox Code Playgroud)
这个解决方案更干净,与Rhino Mocks 3.6一起工作正常:
myStub.Stub(x => x.TryGet("Key", out myValue))
.OutRef("value for the out param")
.Return(true);
Run Code Online (Sandbox Code Playgroud)