使用 Moq 模拟 returns 动态 return 类型的方法
Mocking a method that returns dynamic return type with Moq
给定以下界面:
public interface IApiHelper
{
dynamic CallApi(string url);
}
我已经声明了一个实例化的 Mock<IApiHelper> _apiHelperMock
我正在尝试编写一个 returns 成功 = 真 属性 的测试来模拟 JSON 结果。我的设置如下所示:
_apiHelperMock.Setup(o => o.CallApi(It.IsAny<string>())).Returns((dynamic)new { Success = true });
然而,我在尝试 运行 测试时遇到以下错误:
Moq.Language.Flow.ISetup' 不包含 'Returns'
的定义
谁能告诉我我做错了什么?
您不必将匿名类型对象转换为 dynamic
。
试试这个:
_apiHelperMock
.Setup(o => o.CallApi(It.IsAny<string>()))
.Returns(new { Success = true });
或者 return Dictionary<string,string>
:)
我能够创建一个 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);
给定以下界面:
public interface IApiHelper
{
dynamic CallApi(string url);
}
我已经声明了一个实例化的 Mock<IApiHelper> _apiHelperMock
我正在尝试编写一个 returns 成功 = 真 属性 的测试来模拟 JSON 结果。我的设置如下所示:
_apiHelperMock.Setup(o => o.CallApi(It.IsAny<string>())).Returns((dynamic)new { Success = true });
然而,我在尝试 运行 测试时遇到以下错误: Moq.Language.Flow.ISetup' 不包含 'Returns'
的定义谁能告诉我我做错了什么?
您不必将匿名类型对象转换为 dynamic
。
试试这个:
_apiHelperMock
.Setup(o => o.CallApi(It.IsAny<string>()))
.Returns(new { Success = true });
或者 return Dictionary<string,string>
:)
我能够创建一个 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);