【发布时间】:2012-01-31 10:26:21
【问题描述】:
我有一个 MSpec 测试来检查我的表单身份验证是否正确重定向了未经授权的请求,但是对受保护操作的测试调用直接进入它而不会被授权捕获。 根据我的阅读,人们通常需要伪造身份验证来测试带有 [Authorize] 标签的操作,所以我不明白它是如何直接进入受保护的操作方法的。
如果有人能提供帮助将不胜感激,这是我第一次尝试使用 MSpec,它看起来应该非常有用,但我无法让它工作!
控制器:
[Authorize]
public class HomeController : Controller
{
public ActionResult Index()
{
return View("Index", null);
}
}
测试:
[Subject("Login and Authentication")]
public class when_protected_page_invoked
{
private static HomeController homeController;
private static SecurityController securityController;
private static ActionResult result;
private Establish context = () =>
{
homeController = new HomeController();
securityController = new SecurityController(new SecurityService(new NHibernateRepository<User>(), new NHibernateRepository<Session>()));
};
private Because of = () => result = homeController.Index();
private It should_redirect_to_securityController = () =>
{
result.ShouldBeARedirectToRoute().And().ControllerName().ShouldEqual("Security");
};
}
当我现在运行测试时,它会失败并返回一个 ViewResult 异常,如果我调试它只是返回 Home.Index() 结果。
【问题讨论】:
-
如果调试索引操作,User.Identity.IsAuthenticated 返回什么?也许 MSpec 在后台将其设置为 true
-
this question 关于同样的问题,但 NUnit 建议 Authorize 在路由级别启动,因此无法通过直接调用控制器来实现。这确实是有道理的,但不同意我看到的那些说你需要伪造身份验证的说法。
标签: c# asp.net-mvc-3 forms-authentication mspec