首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试ActionFilterAttribute - OnActionExecuted

如何测试ActionFilterAttribute - OnActionExecuted
EN

Stack Overflow用户
提问于 2012-06-27 09:48:33
回答 1查看 1.5K关注 0票数 4

我试图对一个定制的ActionFilterAttribute进行单元测试。例如:

代码语言:javascript
复制
public class ActionAuthorizationAttribute: ActionFilterAttribute 
{

  protected override void  OnActionExecuted(ActionExecutedContext filterContext)
  {
    filterContext.HttpContext.Response.Redirect("SecurityException");
  }
}

我如何编写单元测试,以测试任何具有此属性的操作都将重定向到SecurityException。

我的尝试

代码语言:javascript
复制
[TestClass]
public class TestControllerResponse
{
  [TestMethod]
  public void TestPermissionAccepted()
  {
    var controller = new TestController();
    var result = controller.Index() as RedirectToRouteResult;
    Assert.IsNotNull(result);
    Assert.AreEqual("SecurityException", result.RouteValues["action"]);
  }
}

protected class TestController : Controller
{
  [ActionAuthorization]
  public ActionResult Index()
  {
    return RedirectToAction("UnfortunatelyIWasCalled");
  }

}

不幸的是,测试失败了。索引操作重定向到"UnfortunatelyIWasCalled“而不是"SecurityException”。

EN

回答 1

Stack Overflow用户

发布于 2012-07-01 02:49:38

我不会对控制器的操作进行单元测试,以测试操作过滤器的行为。它们是两个不同的问题。例如,如果有人去更改ActionAuthorizeAttribute的OnActionExecutedMethod以返回不同的异常,那么您对控制器操作的单元测试就会因为错误的原因而失败。这是因为,您正在测试Action,但是您的代码也测试了ActionFilter中的其他内容。单元测试就是独立地验证一个工作单元的行为。如果您真的想测试ActionFilter,我会单独测试过滤器。在您的操作执行之后是否调用ActionFilter是一个单独的问题,并且已经由MVC框架进行了测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11223473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档