嘲笑HttpActionContext.测试Web时的ActionArguments.Api ActionFilter

本文关键字:ActionArguments Api ActionFilter 时的 Web HttpActionContext 测试 嘲笑 | 更新日期: 2023-09-27 18:19:15

我正在编写一个onactionexecution动作过滤器,我想对其功能进行单元测试。

过滤器需要做的一件事是对传入过滤器的操作参数执行一些验证。

我正在从actionContext.ActionArguments字典中获得参数,该字典对实现很好,但我很难对其进行单元测试。

在我的测试中,我不能设置actionContext.ActionArguments,因为它没有setter,也不能模拟它,因为它不是虚拟的。

这让我有点困惑,我是否可以得到任何值从单元测试在这种情况下?

嘲笑HttpActionContext.测试Web时的ActionArguments.Api ActionFilter

根据AspNetWebStack的源代码,ActionArguments只是一个简单的Dictionary。因此,向其中插入键值对非常简单。我只需要输入

actionContext。ActionArguments[key] = value;

在单元测试的安排部分。

希望有帮助

请看我的博客:https://dondeetan.com/2016/09/19/validating-and-unit-testing-web-api-2-route-attribute-parameters/

 var mockactioncontext = new HttpActionContext
            {
                ControllerContext = new HttpControllerContext
                {
                    Request = new HttpRequestMessage()
                },
                ActionArguments = { { "employeeid", "null" } }
            };
            mockactioncontext.ControllerContext.Configuration = new HttpConfiguration();
            mockactioncontext.ControllerContext.Configuration.Formatters.Add(new JsonMediaTypeFormatter());
            var filter = new <youractionattributefilterclass>();
            filter.OnActionExecuting(mockactioncontext);
            Assert.IsTrue(mockactioncontext.Response.StatusCode == HttpStatusCode.BadRequest);