How to get content value in Xunit when result returned in IActionResult type
27,850
Depends on what you expect returned. From previous example you used an action like this.
[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);
}
}
That method will either return a OkObjectResult
or a NotFoundResult
. If the expectation of the method under test is for it to return Ok()
then you need to cast the result in the test to what you expect and then do your assertions on that
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);
}
Author by
Julie C.
Updated on September 08, 2020Comments
-
Julie C. over 3 years
I have a unit test project using Xunit and the method we are testing returns
IActionResult
.I saw some people suggest using "NegotiatedContentResult" to get the content of the
IActionResult
but that doesn't work in Xunit.So I wonder how to get the content value of an
IActionResult
in Xunit?Test code example is provided below:
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); }
Does anyone know how to do this in XUnit?