Assert.Equal не может преобразовать ошибку во время тестирования xUnit

Я пытаюсь проверить следующий метод:

[Route("api/title")]
[HttpPost()]
public IActionResult InsertTitle([FromBody] GtlTitle gtlTitle)
{
    string pattern = "[0-9]*[-| ][0-9]*[-| ][0-9]*[-| ][0-9]*";
    Match m = Regex.Match(gtlTitle.ISBN, pattern, RegexOptions.IgnoreCase);
    if (m.Success)
    {
        try
        {
            return Ok(_gtlTitleRepository.InsertTitle(gtlTitle));
        }
        catch (Exception e)
        {
            return BadRequest();
        }
    }
    else
        return BadRequest("Could not match");

}

Для положительного теста я написал следующий код:

[Fact]
public void Insert_Title_When_ISBN_Valid()
{
    DateTime d = new DateTime(1999, 6, 1);
    var repositoryMock = new Mock<IGtlTitleRepository>();
    var title = new GtlTitle() { ISBN = "978-0-105-696", VolumeName = "vname", TitleDescription = "desc", PublicationDate = d, 
                                     AuthorID = 2, PublisherID = 2, TempID = 77774};
    repositoryMock.Setup(r => r.InsertTitle(title)).Returns(title);

    var controller = new TitleController(repositoryMock.Object);

    var result = controller.InsertTitle(title);
    Assert.Equal(title, result);
}

В сети: Assert.Equal(title, result); Я получаю следующие ошибки:

Аргумент 1: невозможно преобразовать GTL.Models.Books.GtlTitle в «строку».

Аргумент 2: невозможно преобразовать Microsoft.AspNetCore.Mvc.IActionResult в строку

Что не так с моим модульным тестом? Почему он ожидает, что объекты будут иметь строковый тип?


person Questieme    schedule 26.05.2020    source источник


Ответы (1)


Действие контроллера возвращает IActionResult, но вы сравниваете его с объектом Title. Вместо этого вы должны проверить, является ли это OkObjectResult, и подтвердить его значение:

var result = controller.InsertTitle(title);
var okResult = Assert.IsType<OkObjectResult>(result);
Assert.Equal(title, okResult.Value);
person Sergey Berezovskiy    schedule 26.05.2020
comment
Действительно ли он отличается от этого stackoverflow.com/a/62001121/4728685? - person Pavel Anikhouski; 26.05.2020
comment
@PavelAnikhouski разные результаты действий и разные ошибки, но да, оба о тестировании основных контроллеров aspnet - person Sergey Berezovskiy; 26.05.2020