如何在MVC 6中存根/模拟AuthenticationManager?

布赖恩·瓦莱伦加(Brian Vallelunga)

我正在尝试对直接与this.HttpContext.Authentication身份验证交互的MVC 6控制器进行单元测试我没有使用Identity Framework,而是直接与Cookie身份验证中间件进行交互。

在MS看到的一些示例之后,我一直在使用DefaultHttpContext进行测试。问题是DefaultHttpContext上的AuthenticationManager属性是只读的,因此我不确定如何模拟它。

如果不进行模拟,则在调用时,我会在测试中收到一条错误消息,指出“未配置身份验证处理程序来处理方案:Cookie”

HttpContext.Authentication.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, claimsPrincipal, authProperties);

西梅拉兹

我遇到了同样的问题,最后我使用Moq进行了一定程度的模拟

var claimPrincipal = new ClaimsPrincipal();

var mockAuth = new Mock<AuthenticationManager>();
mockAuth.Setup(c => c.SignInAsync("YourScheme", claimPrincipal)).Returns(Task.FromResult("done"));

var mockContext = new Mock<HttpContext>();
            mockContext.Setup(c => c.Authentication).Returns(mockAuth.Object);

var fakeActionContext = new ActionContext(mockContext.Object, new RouteData(), new ControllerActionDescriptor());
var contContext = new ControllerContext(fakeActionContext);

然后将那个控制器上下文传递给要测试的控制器

 var controller = new TestedController(Your attribute)
 {
       ControllerContext = contContext
  };

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章