使用RhinoMocks输出参数

时间:2011-09-26 17:24:21

标签: rhino-mocks

我显然很困惑 - 这是我用其他几个框架完成的任务(NMock,Moq,FakeItEasy)。我有一个函数调用我想要存根。函数调用具有out参数(对象)。

函数调用是在代码中多次调用的用例。调用代码传递参数,包括out参数的NULL对象。我想根据提供的其他参数设置一个预期的OUT参数。

如何指定一个预期的INBOUND out参数NULL,一个对象的预期OUTBOUND out参数按照我期望的方式填充?我已经尝试了六种方式到星期日,到目前为止还没有能够得到任何东西但是我的OUTBOUND out参数为NULL。

3 个答案:

答案 0 :(得分: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);
     

out是编译器的强制要求。 Arg.Out(新用户())是   对我们来说重要的部分,它指出了out参数应该   返回新用户()。 Dummy只是指定类型User的一个字段,   让编译器开心。

答案 1 :(得分:6)

如果使用存储库生成Mock / Stub

checkUser = MockRepository.GenerateMock<ICheckUser>

您可以使用out参数

设置期望值
checkUser
.Expect(c => c.TryGetValue(Arg.Is("Ayende"), out Arg<User>.Out(new User()).Dummy)
.Return(true) 

答案 2 :(得分:5)

此解决方案更清晰,可与Rhino Mocks 3.6一起使用:

myStub.Stub(x => x.TryGet("Key", out myValue))
      .OutRef("value for the out param")
      .Return(true);