使用.Net Core 2和Moq,如何设置HTTP上下文来伪造身份验证?

Dav*_*vid 3 c# authentication unit-testing moq .net-core-2.0

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

var userName = HttpContext.User.Identity.Name;
Run Code Online (Sandbox Code Playgroud)

我发现了很多使用System.Web的例子,但没有一个能让我模拟Core 2的设置.

Nko*_*osi 7

您可以实现相同的功能,而无需模拟任何内容并使用框架提供的现有类.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我喜欢这里的清洁.我相信,我的答案将允许你模拟Context对象的其他部分,但是根据我的需要,这是完美的.谢谢! (2认同)