单元测试项目- NUnit引用,抛出异常



我有一个单元测试项目,我写了一个测试来检查一个功能:

[Test]
public async Task should_not_be_able_register_user_when_user_with_given_name_already_exists()
{
var mockUserRepository = new Mock<IUserRepository>();
var userService = new UserService(mockUserRepository.Object);
mockUserRepository.Setup(x => x.AddAsync(user));
await userService.RegisterAsync("user", "userLastName", "fakeuser", "user@example.com", "123456789");
}

在这个测试中,我想检查当用户存在抛出我定义的异常,但我有问题。

  1. 当我调用await userService.RegisterAsync…如何写assert

    Assert.Throws(() =比;这里应该有什么?

我的代码:

public async Task RegisterAsync(string firstName, string lastName, string username, string email, string phoneNumber)
{
var user = await _userRepository.GetAsync(username);
if (user != null)
{
throw new CoreException(ErrorCode.UsernameExist, $"Username {user.Username} already exist.");
}
user = new User(firstName, lastName, username, email, phoneNumber);
await _userRepository.AddAsync(user);
}

GetAsync:

public async Task<User> GetAsync(string username)
=> await _context.Users.SingleOrDefaultAsync(x => x.Username == username);

设置模拟以返回User

//...
User user = new User("firstName", "lastName", "username", "email", "phoneNumber");
mockUserRepository
.Setup(x => x.GetAsync(It.IsAny<string>()))
.ReturnsAsync(() => user);

//...

,

if (user != null)
{
throw new CoreException(ErrorCode.UsernameExist, $"Username {user.Username} already exist.");
}

将导致主题代码抛出预期的错误并断言。

这些都可以概括为

[Test]
public async Task should_not_be_able_register_user_when_user_with_given_name_already_exists() {
//Arrange
var mockUserRepository = new Mock<IUserRepository>();
var userService = new UserService(mockUserRepository.Object);
User user = new User("firstName", "lastName", "username", "email", "phoneNumber");
mockUserRepository
.Setup(x => x.GetAsync(It.IsAny<string>()))
.ReturnsAsync(() => user);
//Act
Func<Task> act = userService.RegisterAsync("user", "userLastName", "fakeuser", "user@example.com", "123456789");
//Assert
CoreException exception = await Assert.ThrowsAsync<CoreException>(act);
}

最新更新