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

9

给定以下接口:

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'的定义 请问有人能告诉我我在这里做错了什么吗?
3个回答

9
我能创建一个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);

3

不需要将匿名类型对象转换为dynamic

试试这个:

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

太好了,就像在https://learn.microsoft.com/de-de/aspnet/signalr/overview/testing-and-debugging/unit-testing-signalr-applications下所写的一样。 mockClients.Setup(m => m.All).Returns((ExpandoObject)all) - DotNetDev

0

或者只需返回Dictionary<string,string> :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接