使用lambda表达式设置方法
本文关键字:方法 设置 表达式 lambda 使用 | 更新日期: 2023-09-27 18:18:24
我试图通过使用相应的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本身之外的其他东西上设置方法。
你说你想要你的IMethodCall
实例返回一个特定的值,当它的RunMethod
方法与你的stubService
作为参数调用。在这种情况下,您需要传入一个模拟IMethodCall
,因为这是您正在定义其行为的对象。
如果您查看这里的示例,您将看到所有被模拟的方法都是模拟上的方法。所以,如果你可以重构你的TService类型,让它接受一个methodCall,你可能会让它工作。
为您服务
public IService
{
TResult ExecuteMethodCall(IMethodCall<IService, TResult>);
}
然后在你的测试
stubService.Setup(t => t.ExecuteMethodCall(methodCall))