J'ai un projet de test unitaire utilisant Xunit et la méthode que nous testons renvoie IActionResult
.
J'ai vu certaines personnes suggérer d'utiliser "NegotiatedContentResult" pour obtenir le contenu du IActionResult
mais cela ne fonctionne pas dans Xunit.
Je me demande donc comment obtenir la valeur de contenu d'un IActionResult
dans Xunit?
Un exemple de code de test est fourni ci-dessous:
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);
}
Est-ce que quelqu'un sait comment faire cela dans XUnit?
Dépend de ce que vous attendez retourné. Dans l'exemple précédent, vous avez utilisé une action comme celle-ci.
[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);
}
}
Cette méthode retournera soit un OkObjectResult
soit un NotFoundResult
. Si l'attente de la méthode testée est qu'elle renvoie Ok()
, vous devez convertir le résultat du test en fonction de ce que vous attendez, puis faire vos affirmations à ce sujet.
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);
}