模拟一个使用Moq返回动态返回类型的方法

本文关键字:返回 Moq 动态 返回类型 方法 一个 模拟 | 更新日期: 2023-09-27 18:27:58

给定以下接口:

public interface IApiHelper
{
   dynamic CallApi(string url);
}

我已经声明了一个实例化的Mock<IApiHelper> _apiHelperMock

我正在尝试编写一个返回Success=true属性的测试,以模拟JSON结果。我的设置如下:

_apiHelperMock.Setup(o => o.CallApi(It.IsAny<string>())).Returns((dynamic)new { Success = true });

但是,我在尝试运行测试时遇到以下错误:Moq.Language.Flow.ISetup'不包含"Returns"的定义

有人能告诉我我在这里做错了什么吗?

模拟一个使用Moq返回动态返回类型的方法

我能够创建一个ExpandoObject并将其强制转换为object

dynamic userInfo = new ExpandoObject();
dynamic user1 = new ExpandoObject();
user1.title = "aaa";
dynamic user2 = new ExpandoObject();
user2.title = "bbb";
userInfo.groups = new List<ExpandoObject> { user1 , user2 };
var endpointMock = new Mock<IRestEndpointHandler>();
endpointMock.Setup(c => c.RequestJsonDynamicGet(It.IsAny<Uri>())).Returns((object)userInfo);

您不必将匿名类型对象强制转换为dynamic

试试这个:

_apiHelperMock
    .Setup(o => o.CallApi(It.IsAny<string>()))
    .Returns(new { Success = true });

OR只返回Dictionary<string,string>:)