2011-09-26 72 views
11

我显然感到困惑 - 这是我用我们正在考虑的其他几个框架(NMock,Moq,FakeItEasy)完成的任务。我有一个函数调用,我想存根。函数调用有一个out参数(一个对象)。Out参数与RhinoMocks

函数调用处于代码中多次调用的用例中。调用代码提交参数,包括out参数的NULL对象。我想根据提供的其他参数设置预期的OUT参数。

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

回答

20

http://ayende.com/wiki/Rhino+Mocks+3.5.ashx#OutandRefarguments

ref和out参数是特殊的,因为你还必须使 编译高兴。关键字ref和out是mandantory,并且您需要一个字段作为参数 。 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参数应返回新的User() 。虚拟只是指定类型的用户, 的字段,以使编译器很高兴。

+0

我不这样做的犀牛嘲笑3.6虽然... –

+0

该链接现在获得404 Not Found。 – jakejgordon

6

如果使用存储库来产生模拟/存根

checkUser = MockRepository.GenerateMock<ICheckUser> 

您可以设置期望与输出参数

checkUser 
.Expect(c => c.TryGetValue(Arg.Is("Ayende"), out Arg<User>.Out(new User()).Dummy) 
.Return(true) 
+1

我不这样做的犀牛嘲笑3.6虽然... –

4

该解决方案是更清洁和正常工作与犀牛嘲笑3.6:

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