单元测试控制器动作与onactionexecuting被触发

时间:2013-11-05 21:08:05

标签: asp.net-mvc unit-testing

我想对控制器的操作进行单元测试,并且OnActionExecuting过滤器必须在操作正确执行之前运行。

我使用了很多动作过滤器,所以每次进行测试时我都不想手动执行它们。

如果我直接调用控制器动作方法,我可以得到结果,但不执行过滤器。

ViewResult vr = myController.MyAction("hello world") as ViewResult;
Assert.AreEqual("View1", vr.ViewName);

我发现在调用这样的动作时如何执行动作过滤器:

var routeData = new RouteData();
routeData.Values["controller"] = "MyController";
routeData.Values["action"] = "MyAction";

var rc = new RequestContext(new HttpContextWrapper(HttpContext.Current), routeData);
(myController as IController).Execute(rc);

但是后来我找不到获取动作结果的方法,是否可以触发动作过滤器并获取动作结果?

1 个答案:

答案 0 :(得分:0)

我认为你在这里遗漏了几点。

如果您正在讨论单元测试,通常需要单独验证行为

我会亲自测试动作过滤器并分别测试你的控制器动作方法。如果要确保Controller的Action方法使用某个Filter属性,那么这是一个单独的单元测试。为此,您可以使用类似this的内容。

这样做的好处是,您可以孤立地发现问题,而无需担心其他依赖项。您可以通过这种方式获得自动化单元测试的最大好处。