Dot-Net

如何在 ASP.NET Web Api 中對動作過濾器進行單元測試?

  • August 7, 2012

我希望在我的服務中添加一個操作過濾器,以處理將連結數據添加到響應消息中。我發現我需要模擬 HttpActionExecutedContext 但這是一個很難模擬的類,你如何處理動作過濾器測試?

您可以創建一個假的HttpActionExecutedContext如下:

public static HttpActionContext CreateActionContext(HttpControllerContext controllerContext = null, HttpActionDescriptor actionDescriptor = null)
{
   HttpControllerContext context = controllerContext ?? ContextUtil.CreateControllerContext();
   HttpActionDescriptor descriptor = actionDescriptor ?? new Mock<HttpActionDescriptor>() { CallBase = true }.Object;
   return new HttpActionContext(context, descriptor);
}

public static HttpActionExecutedContext GetActionExecutedContext(HttpRequestMessage request, HttpResponseMessage response)
{
   HttpActionContext actionContext = CreateActionContext();
   actionContext.ControllerContext.Request = request;
   HttpActionExecutedContext actionExecutedContext = new HttpActionExecutedContext(actionContext, null) { Response = response };
   return actionExecutedContext;
}

我剛剛從 ASP.NET Web API 原始碼中複製並粘貼了該程式碼:ContextUtil類。以下是一些關於他們如何測試一些內置過濾器的範例:

ActionFilterAttributeTest是測試類,ActionFilterAttribute它是一個抽像類,但你會明白的。

引用自:https://stackoverflow.com/questions/11848137