【问题标题】:Unit test to check for global authorization filter on action单元测试以检查全局授权过滤器的操作
【发布时间】:2018-01-04 20:22:45
【问题描述】:

我正在使用 Microsoft.VisualStudio.TestTools.UnitTesting 和 Moq 为 ASP.NET MVC 5 应用程序编写单元测试,该应用程序具有通过 FilterConfig.cs 添加的自定义授权过滤器:

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new AuthorizeRedirect());
        //...
    }
}

这是自定义授权属性:

public class AuthorizeRedirect: AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        base.HandleUnauthorizedRequest(filterContext);

        if (filterContext.RequestContext.HttpContext.User.Identity.IsAuthenticated)
        {
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
            {
                action = "Redirect",
                controller = "Error"
            }));
        }
    }
}

我正在使用 IsAnonymous 方法的略微修改版本:https://datatellblog.wordpress.com/2015/05/05/unit-testing-asp-net-mvc-authorization/。然而,它只检查明确定义的[AuthorizeRedirect] 属性的方法/控制器;在它不存在的情况下,它认为该操作是匿名的。

在检查动作是否允许匿名访问时,是否可以检测到上述属性已在单元测试中全局应用?

【问题讨论】:

    标签: c# asp.net-mvc unit-testing


    【解决方案1】:

    这是测试它的一种方法:查看它是否已添加到全局过滤器中,

    // Arrange
    var coll = new GlobalFilterCollection();
    
    // Act
    FilterConfig.RegisterGlobalFilters(coll);
    var authorized = coll.Any(x => x.Instance is AuthorizeRedirect);
    
    // Assert
    Assert.IsTrue(authorized);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      • 2014-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多