繁体   English   中英

如何在 MVC 中测试 Controller 时恢复 JSON object

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM