无法在单元测试中读取响应内容

时间:2019-08-23 01:56:35

标签: c# unit-testing asp.net-core nunit

我正在尝试使用NUnit在ASP.net core 2.2中编写一个非常简单的单元测试。这是Get:

[HttpGet]
public IActionResult Cars()
{           
    return Ok( new { Cars = new BusinessLayer().GetListOfCars() } );
}

GetListOfCars()的返回类型为List<Car>。其中Car是具有NameModel的类。

这是我的单元测试:

[Test]
public void CarControllerTest_GetAll()
{
    CarsController myController = new CarsController();

    var response = myController.Cars();

    var result = response as OkObjectResult;

    Assert.AreEqual(StatusCodes.Status200OK, result.StatusCode);
}

以上测试工作正常,但是由于需要验证记录数,因此如何读取响应的内容。

我已经尝试过了,但是没有用。

var carlist = result.Value as List<Car>;

2 个答案:

答案 0 :(得分:1)

var carlist = result.Value as List<Car>;

无法正常工作,因为您将数据包装在一个匿名对象中。

new { Cars = new BusinessLayer().GetListOfCars() }

使用动力学提取所需的属性

dynamic model = result.Value;
List<Car> carlist = (List<Car>)model.Cars;

答案 1 :(得分:0)

通过使用动态方法提取Nkosi建议的所需属性,似乎存在一个小的缺陷。

您可以尝试使用反射读取数据,如下所示:

var result = (response as OkObjectResult).Value;

var carlist = result.GetType().GetProperty("Cars").GetValue(result,null);
var list = carlist as List<Car>;