8

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

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

我从actionContext.ActionArgumentsDictionary 中得到了参数,这些参数对于实现来说效果很好,但是我很难对它进行单元测试。

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

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

4

2 回答 2

11

根据 AspNetWebStack 源代码,actionContext.ActionArguments 只是一个简单的字典。因此,将键值对插入其中非常简单。我会做类似的事情

actionContext.ActionArguments[key] = value;

在单元测试的安排部分。

希望有帮助

于 2013-10-03T01:44:14.890 回答
6

请参阅我的博客: 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);
于 2016-09-20T21:22:45.723 回答