2009-09-06 14 views
19

Después de haber buscado Stackoverflow, Google y creo que lo que estoy haciendo se supone que debe estar en lo cierto, sin embargo no parecen resultados a ir bienASP.NET MVC Unidad de Pruebas - Sesiones

[TestMethod] 
    public void LoginAction_Should_Return_View_and_User_Authenticated() 
    { 
     // Arrange 
     var mock = new Mock<ControllerContext>(); 
     var mockSession = new Mock<HttpSessionStateBase>(); 
     mock.Setup(p => p.HttpContext.Session).Returns(mockSession.Object); 

     var testData = FakeUserData.CreateTestUsers(); 
     var repository = new FakeUserRepository(testData); 
     var controller = new AccountController(repository); 
     controller.ControllerContext = mock.Object; 

     // Act 
     var result = controller.Login("testuser1", "testuser1"); 

     // Assert 
     Assert.AreEqual("testuser1", controller.HttpContext.Session["Username"]); 
     Assert.IsTrue((bool)controller.HttpContext.Session["IsAuthenticated"]); 
     Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult)); 
    } 

Cuando corro la prueba es el valor del controlador. HttpContext.Session ["Nombre de usuario"] es nulo; sin embargo, establezco el valor para el nombre de usuario utilizando un Ayudante de sesión. ¿Estoy haciendo algo completamente mal, o algo más? Cualquier ayuda sería muy apreciada.

+1

Gracias por mostrar cómo burlarse de la sesión de un controlador :-) –

Respuesta

11

Utilice Mock.Verify para comprobar si el código subyacente intentó establecer la Sesión ["Nombre de usuario"].

Si su código necesita para establecer la variable de sesión y usarlo - echar un vistazo here.

Quickstart no tiene precio.

Cuestiones relacionadas