Как выполнить модульное тестирование сообщения об ошибке ответа на конфликт в Web API - PullRequest
2 голосов
/ 07 ноября 2019

Вот моя конечная точка:

public IHttpActionResult Work()
{
    try
    {
        this.Service.DoWork();
        return this.Ok();
    }
    catch (SomeException)
    {
        return this.Content(HttpStatusCode.Conflict, new { Message = "The message" });
    }
}

Как выполнить модульное тестирование сообщения об ошибке?

Вот шаблон теста:

[Test]
public void Work_Conflict()
{
    this.Service.Setup(x => x.DoWork()).Throws<SomeException>();
    var result = (<what goes here?>)this.MyController.Work();
    Assert.AreEqual("The message", <what goes here?>);
}

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

Вы были почти там.

Вам необходимо привести результат к фактическим типам, возвращаемым из ApiController, и извлечь ожидаемые данные.

[Test]
public void Work_Conflict()
{
    this.Service.Setup(x => x.DoWork()).Throws<SomeException>();
    IHttpActionResult result = this.MyController.Work();
    var objectResult = result as ObjectResult;
    Assert.IsNotNull(objectResult);
    dynamic model = objectResult.Value;
    string actual = (string)model.Message;
    string expected = "The message";
    Assert.AreEqual(expected, actual);
}
0 голосов
/ 07 ноября 2019

Попробуйте это: где BadRequestObjectResult происходит из пространства имен Microsoft.AspNetCore.Mvc

    public void Work_Conflict()
    {
        //Arrange

        this.Service.Setup(x => x.DoWork()).Throws<SomeException>();

        using (var controller = new MyController()) ;

        //Act
        var result = MyController.Work();
        var badRequest = result as BadRequestObjectResult;

        //Assert
        var conflictCode = 0;
        Assert.AreEqual(conflictCode, badRequest.StatusCode);
        Assert.AreEqual("The message", badRequest.Value);

    }
...