使用全局授权属性进行重定向的单元测试

时间:2016-09-12 13:39:20

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

我正在寻找一个单元测试,确保用户(未登录)无法访问给定页面。虽然我手动测试时效果很好,但我似乎无法编写一个自动测试来捕捉正在发生的事情。

在我的控制器中,我有一个操作,我不想让未登录的用户可以访问。

// GET: Verifier/
[HttpGet]
public ActionResult Index()
{
   return View();
}

在/App_Start/FilterConfig.cs中,我添加了AuthorizeAttribute(),如果用户未经过身份验证,则会将用户重定向到我的登录页面。

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new AuthorizeAttribute());
    }

这很有效,但我无法有效地对它进行单元测试!

[TestMethod]
public void VerifierIndex_NotLoggedIn_RedirectsUserToLogin()
{
    // Arrange
    var controller = new VerifierController();

    // Act
    RedirectToRouteResult result = (RedirectToRouteResult) controller.Index();

    // Assert - Fails because result is null
    Assert.AreEqual("Login", result.RouteValues["action"]);
}

该操作确实返回一个非null的ActionResult,但我似乎无法从该对象中获取任何路由值。显然它没有强制转换为RedirectToRouteResult,因为authorize属性产生的操作实际上不是重定向?

如何有效地测试登录页面的“重定向”是否成功?

谢谢!

0 个答案:

没有答案