我想对控制器的操作进行单元测试,并且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);
但是后来我找不到获取动作结果的方法,是否可以触发动作过滤器并获取动作结果?
答案 0 :(得分:0)
我认为你在这里遗漏了几点。
如果您正在讨论单元测试,通常需要单独验证行为。
我会亲自测试动作过滤器并分别测试你的控制器动作方法。如果要确保Controller的Action方法使用某个Filter属性,那么这是一个单独的单元测试。为此,您可以使用类似this的内容。
这样做的好处是,您可以孤立地发现问题,而无需担心其他依赖项。您可以通过这种方式获得自动化单元测试的最大好处。