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
我在设置单元测试时遇到问题。我看过 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