如何使用自定义委托存根没有参数的方法?
How to stub a method with out parameter using custom delegate?
我正在尝试使用 RhinoMock 的 Do
方法存根一个具有 out
参数的方法,但我一直收到消息 无法解析符号 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
参数传递给被调用方法的任何内容,但它似乎无法以这种方式工作。
看来我终于找到问题的答案了。事实证明,引用 this link 中的第 26.3.1 节:
Specifically, a delegate type D is compatible with an anonymous method
or lambda-expression L provided:
If L is a lambda expression that has an implicitly typed parameter list, D has no ref or out parameters.
这意味着您需要一个明确类型化的参数列表才能创建带有 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);
}
));
}
我正在尝试使用 RhinoMock 的 Do
方法存根一个具有 out
参数的方法,但我一直收到消息 无法解析符号 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
参数传递给被调用方法的任何内容,但它似乎无法以这种方式工作。
看来我终于找到问题的答案了。事实证明,引用 this link 中的第 26.3.1 节:
Specifically, a delegate type D is compatible with an anonymous method or lambda-expression L provided:
If L is a lambda expression that has an implicitly typed parameter list, D has no ref or out parameters.
这意味着您需要一个明确类型化的参数列表才能创建带有 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);
}
));
}