2011-09-29 23 views
8

que tiene la siguiente condición¿Cuál es la mejor manera de probar un RedirectToAction?

if (_ldapAuthentication.IsAuthenticated (Domain, login.username, login.PassWord)) 
{ 
    _ldapAuthentication.LogOn (indexViewModel.UserName, false); 
    _authenticationService.LimpaTentativas (login.username); 
    return RedirectToAction ("Index", "Main"); 
} 

ser verdad, redirecciona a otra página .. lo que sería mejor hacer una prueba?

Respuesta

14

En una prueba unitaria, usted simplemente afirmaría en ActionResult devuelto por su controlador.

//Arrange 
var controller = new ControllerUnderTest(
         mockLdap, 
         mockAuthentication 
        ); 

// Mock/stub your ldap behaviour here, setting up 
// the correct return value for 'IsAuthenticated'. 

//Act 
RedirectResult redirectResult = 
    (RedirectResult) controller.ActionYouAreTesting(); 

//Assert 
Assert.That(redirectResult.Url, Is.EqualTo("/Main/Index")); 
9

Para evitar posibles InvalidCastExceptions en su prueba de unidad, esto es lo que siempre hago:

//Arrange 
var controller = new ControllerUnderTest(
         mockLdap, 
         mockAuthentication 
        ); 

// Mock your ldap behaviour here, setting up 
// the correct return value for 'IsAuthenticated'. 

//Act 
var result = controller.ActionYouAreTesting() as RedirectToRouteResult; 

// Assert 
Assert.NotNull(result, "Not a redirect result"); 
Assert.IsFalse(result.Permanent); // Or IsTrue if you use RedirectToActionPermanent 
Assert.AreEqual("Index", result.RouteValues["Action"]); 
Assert.AreEqual("Main", result.RouteValues["Controller"]); 
Cuestiones relacionadas