我正在寻找一个单元测试,确保用户(未登录)无法访问给定页面。虽然我手动测试时效果很好,但我似乎无法编写一个自动测试来捕捉正在发生的事情。
在我的控制器中,我有一个操作,我不想让未登录的用户可以访问。
// 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属性产生的操作实际上不是重定向?
如何有效地测试登录页面的“重定向”是否成功?
谢谢!