我正在尝试 stub 具有 out
的方法参数使用 RhinoMock 的 Do
方法,但我不断收到消息无法解析符号 outParam。这是 stub 部分:
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)));
}
这是我的自定义委托(delegate)声明:
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); } )); }
关于c# - 如何使用自定义委托(delegate)对没有参数的方法进行 stub ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28367507/