C# 当IActionResult类型中返回结果时,如何在Xunit中获取内容值
我有一个使用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
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抱歉,我在文本中看不到它。可能是因为我的混淆。我注意到,当我包含了一些内容并返回了一个这样的对象数组,每个对象都有自己的包含时,我必须使用该类。你能详细说明你认为该案例无效的意思吗?