【发布时间】:2013-11-05 21:08:05
【问题描述】:
我想对控制器的动作进行单元测试,并且必须运行 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);
但是我找不到获取操作结果的方法,是否可以触发操作过滤器并获取操作结果?
【问题讨论】: