繁体   English   中英

使用lambda表达式设置方法

[英]Setting up methods by using lambda expressions

我试图通过使用相应的lambda表达式伪造一个实例上的方法:

private void TranslateCallbackToSetup<TResult>(Mock<TService> stubService, IMethodCall<TService,TResult> methodCall)
{
    stubService.Setup(t => methodCall.RunMethod(t)).Returns(() =>
    {                
         return default(TResult);
    });
}

public interface IMethodCall<in TService, out TResult> : IMethodCall where TService : class
{
    Func<TService, TResult> RunMethod { get; }
}

语法似乎很好,但代码失败并带有ArgumentException:

表达式不是方法调用:t => t

有什么想法吗?

这是失败的,因为你试图在mock本身以外的东西上设置一个方法。

您说当您使用stubService作为参数调用RunMethod方法时,您希望IMethodCall实例返回特定值。 在这种情况下,您需要传入模拟IMethodCall ,因为这是您正在定义的行为的对象。

如果你看一下这里的例子,你会发现所有被模拟的方法都是mock上的方法。 因此,如果您可以重构TService类型以取代methodCall,那么您可以使其工作。

在你的服务上

public IService 
{
     TResult ExecuteMethodCall(IMethodCall<IService, TResult>);
}

然后在你的测试中

stubService.Setup(t => t.ExecuteMethodCall(methodCall))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM