J'ai créé un filtre d'actions personnalisé afin de valider le paramètre de retour du service Web. Si le paramètre n'est pas vérifié, ActionFilter redirige l'utilisateur vers la page de maintenance.Test d'unité de filtrage d'actions de redirection personnalisé
Voici mon action Filtre
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 }));
}
}
}
Le contrôleur:
[RequireWSValidation(Controller = "Home", Action = "Maintenance", ValidationParam = "WSOk")]
public ActionResult About()
{
ViewData["WSOk"] = true;
return View();
}
public ActionResult Maintenance()
{
return View();
}
Maintenant, je veux ce comportement ActionFilter test unitaire. Mais l'action "À propos de" renvoie toujours un ViewResult, donc je ne peux pas tester si l'ActionFilter redirige l'utilisateur vers la page de maintenance.
Mon unité d'essai:
[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");
}