簡體   English   中英

如何對返回無效的 DAO 更新/刪除方法進行單元測試?

[英]How to unit test DAO Update/Remove methods that return void?

我有兩種方法,我真的不知道如何測試。 它們在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狀態)。

(這個類中使用了Mapper ,但在這兩個方法中沒有使用,所以請不要介意)

我可以在沒有Assert方法的情況下離開這個測試嗎? 如果沒有,我應該如何測試它?

讓模擬驗證它收到了預期的輸入

[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());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM