gpt4 book ai didi

c# - 使用 lambda 表达式设置方法

转载 作者:行者123 更新时间:2023-11-30 16:10:41 24 4
gpt4 key购买 nike

我试图通过使用对应的 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 而失败:

Expression is not a method invocation: t => t

有什么想法吗?

最佳答案

这是失败的,因为您正试图在 mock 本身之外的其他对象上设置方法。

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

如果您查看示例 here ,您会看到所有被模拟的方法都是模拟中的方法。因此,如果您可以重构 TService 类型以改为采用 methodCall,您可能会使其正常工作。

为您服务

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

然后在你的测试中

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

关于c# - 使用 lambda 表达式设置方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25364798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com