Контроллер модульного тестирования, который возвращает объект списка ContentResult - PullRequest
1 голос
/ 24 февраля 2020

Я настраиваю модульный тест и у меня возникают проблемы. Я видел примеры "Привет, мир", однако мой тип возврата более сложный.

Мой контроллер возвращает список объектов. Я получаю обратно объект с массивом объектов, как показано ниже:

Public Class ItemClass
{
    public int Id,
    public string Name
}

Public ContentResult GetItems(string criteria){
  .
  .
  .
  // List<ItemClass> myItemClass (this will containa list of several ItemClass)
  // ItemInfo myItemInfo (this will contain a single object similar to the return data I have outlined below)
  var model = new { ItemsList = myItemList, ItemInfo = myItemInfo}
  return Content( [here i convert my `model` to json data]);
};


.
.
.

//TestMethod starts here:


//setup code

//act
var result = controller.GetList(criteria)

//assert
    //this is where I'm having trouble

// result.content looks like this:  "{"\"itemList\":[{\"id\":1,\"name\":\"Item 1 Name\"},{\"id\":2,\"name\":\"Item 2 Name\"}],"listInfo":{"info1":1,"info2":"bla"}}"

Как я могу десериализовать result.content в список типа ItemClass, чтобы я мог делать утверждения против него? Например, я хотел бы заявить, что результат не равен нулю, что в результате имеется 2 элемента, и я также хотел бы проверить наличие в результате указанных идентификаторов c. Если есть лучший способ сделать этот тип теста, я открыт для предложений.

1 Ответ

1 голос
/ 24 февраля 2020

Я попробовал код. Похоже, вы обернули два разных типа внутри родительского класса. Пожалуйста, используйте родительский тип в методе десериализации. Пожалуйста, обратитесь к коду и изображению ниже. Большое спасибо.

using Newtonsoft.Json;
using System;
using System.Collections.Generic;

namespace ConsoleApp1
{
    class ItemClass
    {
        public int Id;
        public string Name;
    }

    class ListInfo
    {
        public int Info1 { get; set; }
        public string Info2 { get; set; }
    }

    class ItemCol
    {
        public List<ItemClass> ItemList { get; set; }
        public ListInfo ListInfo { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var output = "{\"itemList\":[{\"id\":1,\"name\":\"Item 1 Name\"},{\"id\":2,\"name\":\"Item 2 Name\"}], \"listInfo\": {\"info1\":1,\"info2\":\"bla\"}}";
            var results = JsonConvert.DeserializeObject<ItemCol>(output);
            Console.WriteLine("Hello World!");
        }
    }
}

Вывод кода в Visual Studio

...