【问题标题】:Unable to read response Content in Unit Test无法读取单元测试中的响应内容
【发布时间】:2019-08-23 01:56:35
【问题描述】:

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

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

【问题讨论】:

  • 你可以使用动态dynamic model = result.Value; var cars = model.Cars as List&lt;Car&gt;

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


【解决方案1】:
var carlist = result.Value as List<Car>;

不起作用,因为您将数据包装在匿名对象中。

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

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

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

【讨论】:

  • 谢谢。我已将返回类型更改为返回 List 而不是将其包装在另一个对象中。
【解决方案2】:

使用 dynamic 提取 Nkosi 建议的所需属性似乎存在一个小缺陷。

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

var result = (response as OkObjectResult).Value;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2021-01-03
    • 1970-01-01
    • 2013-08-20
    • 2013-10-11
    • 2021-12-09
    相关资源
    最近更新 更多