C# 返回任务的模拟方法<;动态>;

C# 返回任务的模拟方法<;动态>;,c#,unit-testing,mocking,task,moq,C#,Unit Testing,Mocking,Task,Moq,我对一个返回动态的方法进行了单元测试,当我尝试设置并返回一个动态值时,它在运行测试时会出错 “Moq.etc”的最佳重载方法匹配具有一些无效参数 \u managerMock.Setup(x=>x.someMethod(It.IsAny())) .Returns(Task.FromResult(resource)); 您有两个选择: 带var 如果资源变量未声明为动态,则不需要任何特殊的内容。您所需要的只是好的旧ReturnsAsync。(请选择ReturnsAsync而不是Returns,使用

我对一个返回动态的方法进行了单元测试,当我尝试设置并返回一个动态值时,它在运行测试时会出错

“Moq.etc”的最佳重载方法匹配具有一些无效参数

\u managerMock.Setup(x=>x.someMethod(It.IsAny()))
.Returns(Task.FromResult(resource));
您有两个选择:

带var 如果
资源
变量未声明为
动态
,则不需要任何特殊的内容。您所需要的只是好的旧
ReturnsAsync
。(请选择
ReturnsAsync
而不是
Returns
,使用
Task.FromResult

var-resource=new{Id=1};
_managerMock.Setup(mgr=>mgr.SomeMethod(It.IsAny()))
.ReturnsAsync(资源);
在这个示例中,我创建了一个匿名类型,但您可以使用任何您想要的

充满活力 若您将
资源
声明为动态资源,那个么您需要使用另一个重载的
ReturnsAsync
。您需要指定
valueFunction
而不是指定返回值

dynamic resource=new{Id=1};
_managerMock.Setup(mgr=>mgr.SomeMethod(It.IsAny()))
.ReturnsAsync(()=>资源);

在这个示例中,我创建了一个匿名lambda,但您可以使用您想要的任何东西。

什么是资源?还显示模拟内容的定义以及如何在测试中使用
_managerMock.Setup(x => x.someMethod(It.IsAny<int>()))
            .Returns(Task.FromResult(resource));