[英]How to Cast recovered JSON object when testing Controller in MVC
我正在尝试为我的 MVC 控制器编写一些自动化的端到端集成测试,因为我们有严格的测试要求,我只测试服务是不够的。
我有一个 controller 方法:
[HttpGet("myPath")]
public async Task<ActionResult<IEnumerable<Foo>>> GetFoos()
{
Return Ok( _service.GetFoos());
}
我想对其进行如下测试:
Public Async Task TestController(){
…
Var result=await Client.GetAsync("/myPath"); var jsonFromResponse = await
response.Content.ReadAsStringAsync();
var myList=(IEnumerable<Foo>)JsonConvert.DeserializeObject(jsonFromResponse);
// PERFORM ASSERTION on myList
}
然而,这是例外
---> System.InvalidCastException: Unable to cast object of type 'Newtonsoft.Json.Linq.JArray' to type 'System.Collections.Generic.List`1[Foo]'.
我返回的 JSON 结果似乎还可以,它是:
[
{
"type": 1,
"study": {
"id": 96,
"createdDate": "2017-10-10T00:00:00",
"updatedDate": null,
"X": null
},
"id": 262,
"createdDate": "2019-10-14T07:36:40.104368",
"updatedDate": "2019-10-14T07:36:40.118568"
},
{
"type": 1,
"study": {
"id": 96,
"createdDate": "2017-10-10T00:00:00",
"updatedDate": null,
"X": null
},
"id": 263,
"createdDate": "2019-10-14T07:36:40.147418",
"updatedDate": "2019-10-14T07:36:40.160704"
},
…
]
将反序列化 object 的实现更改为DeserializeObject<T>
var myList=JsonConvert.DeserializeObject<IEnumerable<Foo>>(jsonFromResponse);
上面的代码将自动返回所需的T
中的 object 。
在此处阅读有关 DeserializeObject 的详细信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.