Я тестирую логику контроллера в базовом проекте 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);
}