【发布时间】:2009-07-30 18:33:15
【问题描述】:
我已经构建了一个自定义操作过滤器来验证 Web 服务返回参数。如果参数未验证,ActionFilter 会将用户重定向到维护页面。
这是我的动作过滤器
public class RequireWSValidation : ActionFilterAttribute
{
public String Controller { get; set; }
public String Action { get; set; }
public String ValidationParam { get; set; }
public RequireWSValidation()
: this(null, null)
{
}
public RequireWSValidation(string controller, string action)
: this(controller, action, "WSOk")
{
}
public RequireWSValidation(string controller, string action, string viewDataParam)
{
Controller = controller;
Action = action;
ValidationParam = viewDataParam;
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.Controller.ViewData[ValidationParam] == null)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = Controller, action = Action }));
}
else if ((Boolean)filterContext.Controller.ViewData[ValidationParam] == false)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = Controller, action = Action }));
}
}
}
控制器:
[RequireWSValidation(Controller = "Home", Action = "Maintenance", ValidationParam = "WSOk")]
public ActionResult About()
{
ViewData["WSOk"] = true;
return View();
}
public ActionResult Maintenance()
{
return View();
}
现在我想对这个 ActionFilter 行为进行单元测试。但是“关于”操作总是返回一个 ViewResult,所以我无法测试 ActionFilter 是否将用户重定向到维护页面。
我的单元测试:
[Fact]
public void Should_Redirect_To_Maintenance_On_WS_Error()
{
var controller = new HomeController();
controller.ViewData["WSOk"] = false;
var result = controller.About() as RedirectToRouteResult;
Assert.NotNull(result);
Assert.Equal(result.RouteValues["controller"] as String, "Home");
Assert.Equal(result.RouteValues["action"] as String, "Maintenance");
}
【问题讨论】:
标签: asp.net-mvc