我显然很困惑 - 这是我用其他几个框架完成的任务(NMock,Moq,FakeItEasy)。我有一个函数调用我想要存根。函数调用具有out参数(对象)。
函数调用是在代码中多次调用的用例。调用代码传递参数,包括out参数的NULL对象。我想根据提供的其他参数设置一个预期的OUT参数。
如何指定一个预期的INBOUND out参数NULL,和一个对象的预期OUTBOUND out参数按照我期望的方式填充?我已经尝试了六种方式到星期日,到目前为止还没有能够得到任何东西但是我的OUTBOUND out参数为NULL。
答案 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);