returns ContentResult 列表对象的单元测试控制器

Unit testing controller that returns ContentResult list object

我在设置单元测试时遇到问题。我看过 hello world 示例,但是我的 return 类型更复杂。

我的控制器正在return创建一个对象列表。我正在取回一个对象数组,如下所示:

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 个项目,我还想测试结果中是否存在特定 id。如果有更好的方法来进行此类测试,我愿意接受建议。

我已经试过代码了。看起来您在父 class 中包装了两种不同的类型。请在 Deserialize 方法中使用 Parent 类型。请参考下面的代码和图片。非常感谢。

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!");
        }
    }
}

Code Output in Visual Studio