簡體   English   中英

如何測試ActionFilterAttribute - OnActionExecuted

[英]How to test ActionFilterAttribute - OnActionExecuted

我正在嘗試單元測試自定義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框架的測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM