我希望向我的服务添加一个操作过滤器,以处理向响应消息添加链接数据。我发现我需要模拟 HttpActionExecutedContext,但这是一个很难模拟的类,您如何处理 Action Filter 测试?
最佳答案
您可以为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类(class)。以下是他们如何测试一些内置过滤器的一些示例:
ActionFilterAttributeTest
是 ActionFilterAttribute
的测试类,它是一个抽象类,但您会明白的。
关于.net - 如何在 ASP.NET Web Api 中对操作过滤器进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11848137/