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

C# 当IActionResult类型中返回结果时,如何在Xunit中获取内容值,c#,unit-testing,asp.net-core,xunit,asp.net-core-webapi,C#,Unit Testing,Asp.net Core,Xunit,Asp.net Core Webapi,我有一个使用Xunit的单元测试项目,我们正在测试的方法返回IActionResult 我看到一些人建议使用“NegotiatedContentResult”来获取IActionResult的内容,但这在Xunit中不起作用 所以我想知道如何在Xunit中获得IActionResult的内容值 下面提供了测试代码示例: public void GetTest() { var getTest = new ResourcesController(mockDb); var resul

我有一个使用Xunit的单元测试项目,我们正在测试的方法返回
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中执行此操作吗?

取决于您期望返回的内容。从前面的示例中,您使用了这样的操作

[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);
    }        
}
该方法将返回
OkObjectResult
NotFoundResult
。如果被测试方法的期望是返回
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);
}

如果在ok中返回动态对象,例如:ok(new{token=”“,expiration=DateTime.Now.AddHours(1)};保存了我的一天。只是要补充一点,我从RSharper收到一条警告,声明“Assert.Equal应该是Assert.arequal”似乎返回的内容还有更多内容。我正在返回IActionResult,但当我将结果轻轻强制转换为List时,我得到null,因为它包含属性,并且对象似乎是QueryableIncludeable类型或类似类型。以前从未见过该类…@KonradViltersten这是一个无效强制转换。检查这篇文章le in docs抱歉,我在文本中看不到它。可能是因为我的混淆。我注意到,当我包含了一些内容并返回了一个这样的对象数组,每个对象都有自己的包含时,我必须使用该类。你能详细说明你认为该案例无效的意思吗?