Как выполнить модульное тестирование DAO Update / Remove методами, возвращающими void? - PullRequest
2 голосов
/ 25 февраля 2020

У меня есть два метода, которые я действительно не знаю, как проверить. Они находятся в классе UserService:

    public async Task UpdateUser(int userId, UserInput userInput)
    {
        var user = await _userRepository.Get(userId);
        if (user != null)
        {
            user.Name = userInput.Name;
            _userRepository.Update(user);
        }
    }

    public async Task RemoveUser(int userId)
    {
        var user = await _userRepository.Get(userId);
        if (user != null)
        {
            _userRepository.Remove(user);
        }
    }

И вот тест, который я написал для Update метода:

    [Fact]
    public async void UpdateUser()
    {
        var repository = new Mock<IUserRepository>();
        repository.Setup(r => r.Get(1)).ReturnsAsync(new User(1, "John Doe"));
        repository.Setup(r => r.Update(It.IsAny<User>()));

        var userService = new UserService(repository.Object, SingletonAutoMapper.Mapper);

        var userInput = new UserInput { Name = "John Doe" };
        await userService.Update(1, userInput);
    }

Так что в UpdateUser, единственные методы, которые я Пользуюсь репозиторием, что я говорю, что именно вернуть. Более того, я даже ничего не возвращаю из него (PUT метод web api должен возвращать 204 No Content status).

(Mapper используется в этом классе, но не в этих двух методах, поэтому, пожалуйста, не против)

Могу ли я оставить этот тест без Assert метода? Если нет, то как мне это проверить?

1 Ответ

3 голосов
/ 25 февраля 2020

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

[Fact]
public async Task UpdateUser() {
    //Arrange
    var expectedId = 1;
    var expectedName = "John Doe";
    var expectedUser = new User(expectedId, expectedName);

    var repository = new Mock<IUserRepository>();
    repository.Setup(r => r.Get(expectedId)).ReturnsAsync(expectedUser);        

    var userService = new UserService(repository.Object, SingletonAutoMapper.Mapper);
    var userInput = new UserInput { Name = "John Doe" };

    //Act
    await userService.Update(expectedId, userInput);

    //Assert
    repository.Verify(_ => _.Update(expectedUser), Times.Once());
}
...