2008-09-12 7 views
16

Comment tester une redirection MVC?Tests unitaires Redirection ASP.NET MVC

public ActionResult Create(Product product) 
{ 
    _productTask.Save(product); 
    return RedirectToAction("Success"); 
} 

public ActionResult Success() 
{ 
    return View(); 
} 

est l'approche Ayende's encore la meilleure façon d'aller, avec aperçu 5:

public static void RenderView(this Controller self, string action) 
{ 
    typeof(Controller).GetMethod("RenderView").Invoke(self,new object[] { action}); 
} 

Il semble étrange d'avoir à faire, d'autant plus que l'équipe MVC ont dit qu'ils écrivent le cadre d'être testable.

Répondre

28
[TestFixture] 
public class RedirectTester 
{ 
    [Test] 
    public void Should_redirect_to_success_action() 
    { 
     var controller = new RedirectController(); 
     var result = controller.Index() as RedirectToRouteResult; 
     Assert.That(result, Is.Not.Null); 
     Assert.That(result.Values["action"], Is.EqualTo("success")); 
    } 
} 

public class RedirectController : Controller 
{ 
    public ActionResult Index() 
    { 
     return RedirectToAction("success"); 
    } 
} 
+9

RedirectToRouteResult.Values ​​[] est maintenant RedirectToRouteResult.RouteValues ​​[...] – mxmissile

+0

Est-ce que quelqu'un sait comment vous pouvez réellement faire invoquer l'action lors d'un réexamen? – f0ster

+0

@ f0ster Pourquoi voudriez-vous ça? De toute façon, 'controller.Success()' dans l'exemple ci-dessus permettrait d'accomplir cela. – bzlm

-1

Vous pouvez affirmer sur le résultat ActionResult qui est retourné, vous devrez le convertir au type approprié mais il vous permet d'utiliser le test basé sur l'état. Une recherche sur le Web devrait trouver quelques liens utiles, voici just one cependant.

-1

Vous pouvez utiliser Mvc.Contrib.TestHelper qui fournit des assertions pour tester les redirections. Jetez un oeil à http://kbochevski.blogspot.com/2010/06/unit-testing-mvcnet.html et l'exemple de code. Cela pourrait être utile.

+0

Selon la [FAQ] (http://stackoverflow.com/faq#promotion) '" Soyez prudent, car la communauté désapprouve l'autopromotion manifeste et a tendance à la rejeter et à la signaler comme spam. et si elles se rapportent à votre produit ou à votre site Web, qu'il en soit ainsi, vous devez divulguer votre affiliation dans vos réponses.En outre, si un pourcentage important de vos messages comprend une mention de votre produit ou de votre site Web, vous êtes probablement ici pour les mauvaises raisons. "' – Will

0

Cela fonctionne pour ASP.NET MVC 5 en utilisant NUnit:

[Test] 
    public void ShouldRedirectToSuccessAction() 
    { 
     var controller = new RedirectController(); 
     var result = controller.Index() as RedirectToRouteResult; 

     Assert.That(result.RouteValues["action"], Is.EqualTo("success")); 
    } 

Si vous voulez vérifier que vous redirigez à un autre contrôleur (dire NewController), l'affirmation serait:

Assert.That(result.RouteValues["controller"], Is.EqualTo("New"));