Comment obtenir une valeur de contenu dans Xunit lorsque le résultat est renvoyé dans le type IActionResult

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 de 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 atsortingbute 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 rendu. Dans l’exemple précédent, vous avez utilisé une action comme celle-ci.

 [HttpGet("{id}")] public IActionResult Get(ssortingng 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 renverra un OkObjectResult ou un NotFoundResult . Si l’attente de la méthode testée est qu’elle renvoie Ok() vous devez alors transtyper le résultat du test avec ce que vous attendez, puis faire vos assertions à cet égard.

 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); }