首页 > 解决方案 > 如何让我的单元测试绕过我的 .NET Web 控制器上的 Authorize 标记

问题描述

我在 .NET 4.6.1 中有一个 Web API,我的控制器受 Azure B2C 保护。因此,它们具有 [Authorize] 标签。

我写了一个单元测试来确保我可以成功并测试一些业务逻辑。但是,我无法弄清楚如何绕过 [Authorize] 标记,并且我不想为每个运行的单元测试授权 B2C。

我假设模拟控制器上下文将是一个好的开始,但我无法弄清楚语法。

有几篇关于模拟 ControllerContext 然后设置的文章,HttpContext.Request.IsAuthenticated但这适用于 MVC。

从 转换为System.Web.MVC.ControllerContext时出现错误System.Web.Http.Controllers.HttpControllerContext

无法隐式转换类型错误:

无法隐式转换类型错误

我希望有人可以帮助我弄清楚如何绕过[Authorize]标签进行单元测试?

标签: .netunit-testingmoqauthorize-attribute

解决方案


看起来你的文件中有不同的用途,所以你的模拟是

Mock<System.Web.Mvc.ControllerContext>

而不是一个

Mock<System.Web.Http.Controllers.HttpControllerContext>

如果您指定命名空间,则可以解决该问题。

然而,我会拆分测试,将您的业务逻辑从授权控制器移动到它自己的类中,您可以更轻松地进行测试。

而且我确信有一些方法可以测试您的路线。


推荐阅读