Assert.Equal не может преобразовать ошибку во время тестирования xUnit - PullRequest
0 голосов
/ 26 мая 2020

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

[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 'в строку

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

1 Ответ

2 голосов
/ 26 мая 2020

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

var result = controller.InsertTitle(title);
var okResult = Assert.IsType<OkObjectResult>(result);
Assert.Equal(title, okResult.Value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...