2011-09-29 26 views
8

Ho il seguente condizioneQual è il modo migliore per testare una RedirectToAction?

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

essere vero, reindirizza a un'altra pagina .. che cosa sarebbe meglio fare un test?

risposta

14

In un test di unità, devi solo dichiarare sul ActionResult restituito dal controller.

//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

Per evitare possibili InvalidCastExceptions nel test di unità, questo è quello che faccio sempre:

//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"]); 
Problemi correlati