[英]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.