加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何测试ActionFilterAttribute – OnActionExecuted

发布时间:2020-12-15 21:36:29 所属栏目:百科 来源:网络整理
导读:我正在尝试单元测试自定义ActionFilterAttribute.例如: public class ActionAuthorizationAttribute: ActionFilterAttribute { protected override void OnActionExecuted(ActionExecutedContext filterContext) { filterContext.HttpContext.Response.Redi
我正在尝试单元测试自定义ActionFilterAttribute.例如:

public class ActionAuthorizationAttribute: ActionFilterAttribute 
{

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

如何编写单元测试来测试任何具有此属性的操作将重定向到SecurityException.

我的尝试

[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");
  }

}

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

解决方法

我不会单元测试Controller的Action来测试Action Filter的行为.它们是两个不同的问题.例如,如果某人去并更改ActionAuthorizeAttribute的OnActionExecutedMethod以返回不同的异常,则Controller的Action上的Unit Test将因错误的原因而失败.这是因为,您正在测试Action,但您的代码还在ActionFilter中测试其他内容.单元测试就是孤立地验证工作单元的行为.如果你真的想测试ActionFilter,我会单独测试过滤器.在Action执行后是否调用ActionFilter是一个单独的问题,并且已经过MVC框架的测试.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读