Я пытаюсь научиться модульному тестированию в xUnit для проектов ASP.NET Core.Чтобы добиться этого, я создал простой проект ASP.NET Core для выполнения тестов на нем.Однако я не могу получить 100% покрытие тестов из-за неправильного тестирования исключения, которое обнаруживается внутри метода контроллера.
Вот мой метод контроллера, который я тестирую:
[HttpGet]
public async Task<IEnumerable<User>> GetUsers()
{
try
{
var users = await _repository.User.GetAllUsersAsync();
return users;
}
catch (Exception e)
{
_logger.LogError($"Error in GetUsers: {e}");
return null;
}
}
И вотмой метод модульного тестирования в xUnit:
[Fact]
public async Task GetUsers_WhenCalled_ReturnsCorrectAmountOfUsers()
{
//Arrange
var mockRepo = new Mock<IRepositoryWrapper>();
mockRepo.Setup(repo => repo.User.GetAllUsersAsync())
.ReturnsAsync(GetTestUsers());
var controller = new UsersController(mockRepo.Object, _logger, _service);
//Act
var result = await controller.GetUsers();
//Assert
var model = Assert.IsAssignableFrom<IEnumerable<User>>(result);
model.Count().Should().Be(3);
Assert.Throws<NullReferenceException>(() =>
_controller.GetUsers().Exception);
}
Когда я запускаю тесты, все получает зеленый статус, однако внутри класса контроллера я не вижу «зеленой галочки» рядом со строками с областью действия catch.Мне бы очень хотелось узнать, как написать правильный код для тестирования исключений внутри блоков catch!