Я создал фильтр пользовательских действий для проверки возвращаемого параметра веб-службы. Если параметр не подтвержден, 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. Но действие «About» всегда возвращает 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");
}