Dot-Net
如何在 ASP.NET Web Api 中對動作過濾器進行單元測試?
我希望在我的服務中添加一個操作過濾器,以處理將連結數據添加到響應消息中。我發現我需要模擬 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它是一個抽像類,但你會明白的。