我想对控制器的操作进行单元测试,并且必须先运行 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);
但是我找不到获得动作结果的方法,是否可以触发动作过滤器并获得动作结果?