Как преобразовать восстановленный объект JSON при тестировании контроллера в MVC - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь написать несколько автоматических комплексных тестов для моих контроллеров MVC, поскольку у нас есть строгие требования к тестированию, мне недостаточно просто протестировать сервисы.

У меня есть контроллер сМетод:

 [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
}

Однако это исключение

---> Система. InvalidCastException: Невозможно привести объект типа 'Newtonsoft.Json.Linq.JArray' к типу '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"
  },

…
]

1 Ответ

1 голос
/ 14 октября 2019

Измените реализацию десериализации объекта на DeserializeObject<T>

var myList=JsonConvert.DeserializeObject<IEnumerable<Foo>>(jsonFromResponse);

Приведенный выше код автоматически вернет объект в требуемом T.

Прочтите подробности о DeserializeObject на здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...