代码之家  ›  专栏  ›  技术社区  ›  r3plica

c#nunit集成测试(有例外)

  •  2
  • r3plica  · 技术社区  · 7 年前

    我创建了一个测试,如下所示:

    [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");
    }
    

    当我运行测试时,它失败并显示:

    系统ArgumentException:只有管理员才能确认新用户

    但这确实是我测试的目的。它应该通过,因为它抛出 ArgumentException 错误

    1 回复  |  直到 7 年前
        1
  •  2
  •   r3plica    7 年前

    事实证明,我只是在做错误的断言。因为委托是异步的,所以我需要进行异步检查。因此,将我的断言替换为:

    Assert.ThrowsAsync<ArgumentException>(async () => await services.WhenCreateUserAsync("AAAB", "AAAB", "AAAB", "FIN", emailConfirmed: true));
    

    解决了这个问题