繁体   English   中英

单元测试如何对创建方法进行单元测试

[英]unit test How to do a unit test for create method

我想在下面的方法中编写一个单元测试。

使用这种方法我可以添加一个用户,这很好用。 用户可以保存。


public async Task<UserModel> SaveAsync(UserModel model)
{
    if (string.IsNullOrEmpty(model.ExternalUserId))
    {
        var extUser = await identityManagementService.CreateUser(model);

        user = new ApplicationUser()
        {
            ExternalUserId = extUser.UserId,
            IsActive = true,
            UserName = model.Email,
        };
        user.Id = Guid.NewGuid();
        var exists = false;
        
        await applicationUserRepository.AddOrUpdateAsync(user, a => exists);
    }
    await applicationUserRepository.SaveAsync();

                var IsSaved = await identityManagementService.GetUserById(user.ExternalUserId); // to check the user is saved


    return model;

}

单元测试


 [Fact]
        public async Task SaveAsync_Should_AddORUpdate_WhenExternalUserIdDoesNOtExsitsAndProfileImgIsNull() // userRole is exist
        {
            var userModel = UserMockData.UserCorrectModelWithExternalUsserIdEmpty();
            var applicationRole = UserMockData.ApplicationRole();

            _identityManagementService.Setup(x => x.CreateUser(userModel)).Returns(Task.FromResult(UserMockData.User()));
            // _identityManagementService.Setup(x => x.GetUserById(userModel.ExternalUserId)).Returns(() => null);

            _applicationRoleRepository.Setup(x => x.FindAsync(userModel.RoleId)).Returns(Task.FromResult(applicationRole));
            _identityManagementService.Setup(x => x.AssignUserRoles(It.Is<String>(g => g != String.Empty), applicationRole.ExternalRoleId)).Returns(Task.FromResult(true));
            var sut = new UserManagementService(
                _applicationRoleRepository.Object,
                _applicationUserRepository.Object,
                _applicationRolePermissionRepository.Object,
                _identityManagementService.Object,
                _smtpEmailService.Object,
            _logger.Object
                );

            // Act
            var result = await sut.SaveAsync(userModel);

            //Asset
            result.Should().NotBeNull();

            var x = _identityManagementService.Object.GetUserById(userModel.ExternalUserId).Result; // this is null
            var y = _applicationRoleRepository.Object.ListAsync(false).Result?.Count(); //  this is also null

            x.Should().Be(1);


        }

当我在调试模式下检查方法时var IsSaved = await identityManagementService.GetUserById(user.ExternalUserId); // to check the user is saved var IsSaved = await identityManagementService.GetUserById(user.ExternalUserId); // to check the user is saved此行不是 null。

但是当我检查单元测试调试模式时, var IsSaved = await identityManagementService.GetUserById(user.ExternalUserId); // to check the user is saved var IsSaved = await identityManagementService.GetUserById(user.ExternalUserId); // to check the user is saved为 null

如何验证/测试用户是否已通过此方法保存?

请指导我。

因为您没有模拟 GetUserById 方法。 您必须模拟 GetUserById 方法。 在模拟中,我们没有进行实际创建,这就是为什么您的 GetUserById 给出的结果为 null。

请在您的测试方法中添加以下代码 -

  _identityManagementService.Setup(x => x.GetUserById(userModel.ExternalUserId)).Returns(true);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM