Метод удаления основного модуля Asp.Net в контроллере - PullRequest
0 голосов
/ 18 марта 2019

Я тестирую логику контроллера в базовом проекте asp.net с xUnit и Moq, и у меня возникают проблемы с тестированием метода удаления. Я пытался собрать воедино некоторые идеи из разных уроков и т. Д., Но все еще боролся.

Мне удалось проверить, что метод возвращает NoContentResult и NotFoundResponse. Чего мне не хватает, так это теста, который показывает, что метод delete действительно удалил элемент из хранилища Bygg.

В данном случае я пытаюсь получить список Bygg, удалить элемент, а затем использовать assert, чтобы проверить, что список теперь содержит только 2 элемента.

fyi: bygg = building.

Проект следует шаблону репозитория с общими и пользовательскими репозиториями.

Это метод удаления в контроллере:

[HttpDelete("{id}")]
public async Task<IActionResult> DeleteBygg(int id)
{
    try
    {
        var bygg = await _byggRepository.GetByggByIdAsync(id);
        if (bygg == null)
        {
            return NotFound();
        }

        await _byggRepository.DeleteByggAsync(bygg);

        return NoContent();
    }
    catch (Exception ex)
    {
        return StatusCode(500, "Internal Server Error");
    }
}

Это метод испытаний:

[Fact]
public async Task DeleteBygg_ExistingIdPassed_RemovesOneItem()
{
    // Arrange
    _mockRepo.Setup(repo => repo.DeleteByggAsync(It.IsAny<Bygg>()));
    _mockRepo.Setup(repo => repo.GetAllByggAsync())
        .ReturnsAsync(GetTestBygg());

    // Act
    var actual = await _controller.GetAllBygg();
    var actual2 = actual as OkObjectResult;
    var noContentResponse = await _controller.DeleteBygg(1);


    // Assert
    var items = Assert.IsType<List<Bygg>>(actual2.Value);
    Assert.Equal(2, items.Count);
}

1 Ответ

1 голос
/ 18 марта 2019

Поскольку вы ничего не возвращаете из метода DeleteBygg, вам нужно просто проверить в методе теста, что await _byggRepository.DeleteByggAsync(bygg); правильно вызывает в вашем текущем методе, следующим образом:

[Fact]
public async Task DeleteBygg_ExistingIdPassed_RemovesOneItem()
{        
    // Arrange
    var id = 1;
    _mockRepo.Setup(repo => repo.GetByggByIdAsync(id)).ReturnsAsync(new Bygg(){});
    _mockRepo.Setup(repo => repo.DeleteByggAsync(It.IsAny<Bygg>())).Returns(Task.CompletedTask);

    // Act
    await _controller.DeleteBygg(id);

    // Assert
    _mockRepo.Verify(repo => repo.DeleteByggAsync(It.IsAny<Bygg>()),Times.Once);
}
...