如何让我的单元测试可以绕过我的.NET Web控制器的授权标签

问题描述 投票:0回答:2

我在.NET 4.6.1在Web API和我的控制器是Azure的B2C保护。因此,他们有[授权]标签。

我写了一个单元测试,以确保我能打到路线和测试一些业务逻辑。但是,我想不出如何绕过[授权]标签,我不希望与B2C的每个运行单元测试授权。

我假设嘲讽控制器上下文将是一个良好的开端,但我有麻烦搞清楚的语法。

大约有嘲讽的ControllerContext,然后设置HttpContext.Request.IsAuthenticated了几篇文章,但适用于MVC。

我从System.Web.MVC.ControllerContext转换一个错误System.Web.Http.Controllers.HttpControllerContext

无法隐式转换类型的错误:

Cannot implicitly convert type error

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

.net unit-testing moq authorize-attribute
2个回答
1
投票

它看起来像你在你的文件不同的usings,让你的模拟是

Mock<System.Web.Mvc.ControllerContext>

而不是

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

如果指定了命名空间,可以解决这个问题。

不过,我想分手了测试,而不是从授权的控制器到其自己的类,你可以更轻松地测试移动你的业务逻辑。

我敢肯定,有测试你的路由方式。


0
投票

如果你在调试运行测试,它可以通过使用预处理指令绕过授权属性。您可以使用这些从在调试模式(或释放模式)编译删除某些部分。下面的示例示出了如何删除在调试模式下授权属性,而在释放模式离开它

#if !DEBUG
[Authorize]
#endif
public class MyController : Controller
{
    // controller logic
}

我会建议在使用前阅读更多关于preprocessor directives。该解决方案是非常依赖于在测试运行模式。

© www.soinside.com 2019 - 2024. All rights reserved.