当结果以 IActionResult 类型返回时,如何在 Xunit 中获取内容值

How to get content value in Xunit when result returned in IActionResult type

我有一个使用 Xunit 的单元测试项目和我们正在测试的方法 returns IActionResult

我看到有人建议使用 "NegotiatedContentResult" 来获取 IActionResult 的内容,但这在 Xunit 中不起作用。

所以我想知道如何在 Xunit 中获取 IActionResult 的内容值?

测试代码示例如下:

public void GetTest()
{
    var getTest = new ResourcesController(mockDb);

    var result = getTest.Get("1");

    //Here I want to convert the result to my model called Resource and
    //compare the attribute Description like below.
    Resource r = ?? //to get the content value of the IActionResult

    Assert.Equal("test", r.Description);
}

有谁知道如何在 XUnit 中执行此操作?

取决于您的期望 returned。在前面的示例中,您使用了这样的操作。

[HttpGet("{id}")]
public IActionResult Get(string id) {        
    var r = unitOfWork.Resources.Get(id);

    unitOfWork.Complete();

    Models.Resource result = ConvertResourceFromCoreToApi(r);

    if (result == null) {
        return NotFound();
    } else {
        return Ok(result);
    }        
}

该方法将 return OkObjectResultNotFoundResult。如果被测方法的期望是 return Ok() 那么您需要将测试中的结果转换为您期望的结果,然后对该

进行断言
public void GetTest_Given_Id_Should_Return_OkObjectResult_With_Resource() {
    //Arrange
    var expected = "test";
    var controller = new ResourcesController(mockDb);

    //Act
    var actionResult = controller.Get("1");

    //Assert
    var okObjectResult = actionResult as OkObjectResult;
    Assert.NotNull(okObjectResult);

    var model = okObjectResult.Value as Models.Resource;
    Assert.NotNull(model);

    var actual = model.Description;
    Assert.Equal(expected, actual);
}