我有两种方法,我真的不知道如何测试。它们位于 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());
}
关于c# - 如何对返回 void 的 DAO 更新/删除方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60387272/