首页 > 解决方案 > 使用 .Net Core 2 和 Moq,如何设置 HTTP 上下文来伪造身份验证?

问题描述

我正在使用 Moq 在我的 .net core 2 应用程序中进行自动化测试。我们使用不记名身份验证,并且需要能够从 HttpContext 对象中提取名称以确保我们拥有正确的用户:

var userName = HttpContext.User.Identity.Name;

我找到了大量使用 System.Web 的示例,但没有一个可以让我模拟 Core 2 设置。

标签: c#unit-testingauthenticationmoq.net-core-2.0

解决方案


您无需模拟任何东西并使用框架提供的现有类即可实现相同的目标。

public class ContextHelper {
    public static HttpContext GetHttpContext(string name = "validemail@test.com") {
        var identity = new GenericIdentity(name, "test");
        var contextUser = new ClaimsPrincipal(identity);
        var httpContext = new DefaultHttpContext() {
            User = contextUser
        };
        return httpContext;
    }
}

仅仅因为我们有能力嘲笑某些事情并不意味着我们必须在大多数时候嘲笑。


推荐阅读