如何在 NUnit 测试用例中使用 HttpContext AuthenticateAsync 方法?

How to user HttpContext AuthenticateAsync method in NUnit test case?

我们正在为 Gmail 或 Microsoft 的外部登录使用 HttpContext Authenticate Async 方法。使用此 httpcontext 时登录并注册工作正常。但是当我们需要为此场景编写 NUnit 测试用例时,我无法初始化和设置声明身份。为以下场景编写代码

this.externalLoginController.ControllerContext = new ControllerContext();
        this.externalLoginController.ControllerContext.HttpContext = new DefaultHttpContext();
        var testScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
        var principal = new ClaimsPrincipal();
        principal.AddIdentity(new ClaimsIdentity(new[] {
        new Claim(ClaimTypes.Role, "Administrator"),
        new Claim(ClaimTypes.NameIdentifier, "test")
        }, testScheme));

设置httpcontext初始化后调用函数

 var result = await this.HttpContext.AuthenticateAsync(IdentityServerConstants.ExternalCookieAuthenticationScheme).ConfigureAwait(false);

在这种情况下面临“值不能为空:Parameter(provider)”之类的问题。

我需要对 NUnit 测试用例使用来自 HttpContext 的 Authenticate 异步方法。

请指教

谢谢, 萨拉瓦南

我使用下面的代码来模拟 AuthenticateAsync 方法和 return AuthenticateResult。

    public class TestAuthenticationHandler : AuthenticationHandler<TestAuthenticationOptions>
{
    protected override Task<AuthenticateResult> HandleAuthenticateAsync()
    {
        var authenticationTicket = new AuthenticationTicket(
                                         new ClaimsPrincipal(Options.Identity),
                                         new AuthenticationProperties(),
                                         this.Options.AuthenticationScheme);

        return Task.FromResult(AuthenticateResult.Success(authenticationTicket));
    }
}

使我能够在单元测试中使用此方法并通过案例。