c# nunit 异常集成测试
c# nunit integration testing with exceptions
我创建了一个如下所示的测试:
[Test]
public async Task MemberCannotCreateConfirmedUser()
{
var services = UserContext.GivenServices();
await services.LoginAsync(new Claim("User", "Member"));
Assert.That(await services.WhenCreateUserAsync("AAAB", "AAAB", "AAAB", "FIN", emailConfirmed: true), Throws.TypeOf<ArgumentException>());
}
实际抛出错误的代码如下所示:
var principal = _httpContext.User as ClaimsPrincipal;
var isAdmin = principal?.FindFirst("Administrator") != null;
if (!isAdmin)
{
if (model.EmailConfirmed) throw new ArgumentException("Only an administrator can confirm a new user");
}
当我 运行 测试时,它失败并显示:
System.ArgumentException : Only an administrator can confirm a new user
但这肯定是我要测试的。它应该通过,因为它抛出 ArgumentException
错误?
原来我只是在断言错误。因为委托是异步的,所以我需要做一个异步检查。所以用这个替换我的断言:
Assert.ThrowsAsync<ArgumentException>(async () => await services.WhenCreateUserAsync("AAAB", "AAAB", "AAAB", "FIN", emailConfirmed: true));
已解决问题
我创建了一个如下所示的测试:
[Test]
public async Task MemberCannotCreateConfirmedUser()
{
var services = UserContext.GivenServices();
await services.LoginAsync(new Claim("User", "Member"));
Assert.That(await services.WhenCreateUserAsync("AAAB", "AAAB", "AAAB", "FIN", emailConfirmed: true), Throws.TypeOf<ArgumentException>());
}
实际抛出错误的代码如下所示:
var principal = _httpContext.User as ClaimsPrincipal;
var isAdmin = principal?.FindFirst("Administrator") != null;
if (!isAdmin)
{
if (model.EmailConfirmed) throw new ArgumentException("Only an administrator can confirm a new user");
}
当我 运行 测试时,它失败并显示:
System.ArgumentException : Only an administrator can confirm a new user
但这肯定是我要测试的。它应该通过,因为它抛出 ArgumentException
错误?
原来我只是在断言错误。因为委托是异步的,所以我需要做一个异步检查。所以用这个替换我的断言:
Assert.ThrowsAsync<ArgumentException>(async () => await services.WhenCreateUserAsync("AAAB", "AAAB", "AAAB", "FIN", emailConfirmed: true));
已解决问题