使用RhinoMocks输出参数

Jas*_*ton 12 rhino-mocks

我显然很困惑 - 这是我用其他几个框架完成的任务(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不会让你失望:

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);
Run Code Online (Sandbox Code Playgroud)

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)


Mar*_*ira 5

这个解决方案更干净,与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)