web-dev-qa-db-fra.com

Comment obtenir la valeur du contenu dans Xunit lorsque le résultat est retourné 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 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?

18
Julie C.

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