我正在尝试使用RhinoMock的out
方法存根一个具有Do
参数的方法,但我不断收到消息无法解析符号outParam 。这是衔接部分:
private static void FakeClientsLoading(MyClass fakeClass, IEnumerable<string> clientsToLoad)
{
fakeClass.Stub(
x =>
x.LoadClientsFromDb(Arg<string>.Is.Anything,
out Arg<object>.Out(null).Dummy))
.Do(
new LoadClientsFromDbAction(
(someString, out outParam ) =>
TestHelper.LoadClients(someString, clientsToLoad)));
}
这是我的自定义委托声明:
public delegate void LoadClientsFromDbAction(string s, out object outParam);
我想要实现的是在调用LoadClientsFromDb
时运行测试助手方法。根据我的理解,outParam
应该映射到作为out
参数传递给被调用方法的任何内容,但它似乎不会以这种方式工作。
答案 0 :(得分:1)
似乎我终于找到了问题的答案。事实证明,引用this link中的第26.3.1节:
具体而言,委托类型D与匿名方法兼容 或lambda-expression L提供:
如果L是具有隐式类型参数列表的lambda表达式,则D没有ref或out参数。
这意味着您需要一个显式类型化的参数列表,以便创建一个带有out
参数的lambda。
out
参数赋值。
最终和正在运行的代码:
private static void FakeClientsLoading(MyClass fakeClass, IEnumerable<string> clientsToLoad)
{
fakeClass.Stub(
x =>
x.LoadClientsFromDb(Arg<string>.Is.Anything,
out Arg<object>.Out(null).Dummy))
.Do(
new LoadClientsFromDbAction(
(string someString, out object outParam) =>
{
outParam = null;
TestHelper.LoadClients(someString, clientsToLoad);
}
));
}