2008-09-12 25 views
16

¿Cómo puedo probar la unidad con una redirección MVC?Pruebas unitarias Redirección de ASP.NET MVC

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

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

Es Ayende's enfoque sigue siendo el mejor camino a seguir, con vista previa 5:

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

Parece extraño tener que hacer esto, sobre todo porque el equipo MVC han dicho que están escribiendo el marco estar comprobable.

Respuesta

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 ​​[] es ahora RedirectToRouteResult.RouteValues ​​[...] – mxmissile

+0

¿Alguien sabe cómo se puede invocar la acción cuando se redirige durante la prueba? – f0ster

+0

@ f0ster ¿Por qué querrías eso? De cualquier forma, 'controller.Success()' en el ejemplo anterior lo lograría. – bzlm

-1

Puede afirmar en ActionResult que se devuelve, deberá convertirlo al tipo apropiado, pero le permite usar pruebas basadas en estado. Una búsqueda en la Web debería encontrar algunos enlaces útiles, aquí está just one.

-1

puede usar Mvc.Contrib.TestHelper que proporciona aserciones para probar las redirecciones. Eche un vistazo a http://kbochevski.blogspot.com/2010/06/unit-testing-mvcnet.html y la muestra del código. Puede ser útil.

+0

Según [Preguntas frecuentes] (http://stackoverflow.com/faq#promotion) '" Tenga cuidado, porque la comunidad no ve con buenos ojos una autopromoción abierta y tiende a rechazarla y marcarla como spam. Publique respuestas buenas y relevantes , y si se trata de su producto o sitio web, que así sea. Sin embargo, debe divulgar su afiliación en sus respuestas. Además, si un gran porcentaje de sus publicaciones incluye una mención de su producto o sitio web, es probable que aquí por las razones equivocadas ". – Will

0

Esto funciona para ASP.NET MVC 5 utilizando NUnit:

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

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

Si desea probar que está redirigiendo a un controlador diferente (decir NewController), la afirmación sería:

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