我在.NET 4.6.1在Web API和我的控制器是Azure的B2C保护。因此,他们有[授权]标签。
我写了一个单元测试,以确保我能打到路线和测试一些业务逻辑。但是,我想不出如何绕过[授权]标签,我不希望与B2C的每个运行单元测试授权。
我假设嘲讽控制器上下文将是一个良好的开端,但我有麻烦搞清楚的语法。
大约有嘲讽的ControllerContext,然后设置HttpContext.Request.IsAuthenticated
了几篇文章,但适用于MVC。
我从System.Web.MVC.ControllerContext
转换一个错误System.Web.Http.Controllers.HttpControllerContext
。
无法隐式转换类型的错误:
我希望有人能帮助我弄清楚如何绕过我的单元测试的[Authorize]
标签?
它看起来像你在你的文件不同的usings,让你的模拟是
Mock<System.Web.Mvc.ControllerContext>
而不是
Mock<System.Web.Http.Controllers.HttpControllerContext>
如果指定了命名空间,可以解决这个问题。
不过,我想分手了测试,而不是从授权的控制器到其自己的类,你可以更轻松地测试移动你的业务逻辑。
我敢肯定,有测试你的路由方式。
如果你在调试运行测试,它可以通过使用预处理指令绕过授权属性。您可以使用这些从在调试模式(或释放模式)编译删除某些部分。下面的示例示出了如何删除在调试模式下授权属性,而在释放模式离开它
#if !DEBUG
[Authorize]
#endif
public class MyController : Controller
{
// controller logic
}
我会建议在使用前阅读更多关于preprocessor directives。该解决方案是非常依赖于在测试运行模式。