【发布时间】:2020-06-08 18:04:55
【问题描述】:
我有两种方法,我真的不知道如何测试。它们属于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 方法的情况下离开这个测试吗?如果不是,我应该如何测试它?
【问题讨论】:
-
让模拟验证它收到了预期的输入
-
@Nkosi 我不确定我是否理解你的问题。我发布的测试就是我得到的。
-
这能回答你的问题吗? Unit Test a method that returns a void
-
@devNull 是的,谢谢
标签: c# .net unit-testing testing asp.net-core-webapi