控制器测试忽略ASP.Net MVC中的全局过滤器?

时间:2011-07-31 11:46:43

标签: asp.net-mvc-3 authentication forms-authentication

我刚开始编写的ASP.Net MVC 3应用程序需要对所有控制器进行身份验证,但AccountsController除外。我没有使用[Authenticate]装饰我的所有控制器,而是编写了两个自定义属性。第一个继承自AuthorizationAttribute,它检查当前操作是否用另一个AllowAnonymous修饰。如果不是,它使用表单身份验证来查看当前用户是否经过身份验证,如果没有,则重定向到登录页面。

要将此应用于所有控制器,我已将自定义授权属性添加到GlobalFilterCollection RegisterGlobalFilters中的global.asax.cs

这一切都在浏览器中运行,但当我运行MVC Internet应用程序附带的默认测试时,我感到很惊讶,看到主页的HomeControllerTest测试通过,并说“欢迎使用ASP.NET MVC”文本在ViewBag中。我希望此测试失败,因为在浏览器中查看此操作将重定向到登录页面,除非用户已登录。

我的身份验证方法是错误的还是我需要在测试中编写一些内容来应用全局过滤器?逐步完成单元测试表明,过滤器正在添加,但它们并未以我期望的方式应用。

1 个答案:

答案 0 :(得分:2)

你的方法听起来不错。但是,您需要单独测试控制器和操作过滤器。请参阅following question