2009-09-06 7 views
19

Après avoir cherché StackOverflow et Google Je pense que ce que je fais est supposé être juste, mais les résultats ne semblent pas aller bienASP.NET MVC Test Unit - Sessions

[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)); 
    } 

Quand je lance le test de la valeur de controller.HttpContext.Session ["Username"] est null, cependant je définis la valeur du nom d'utilisateur en utilisant un assistant de session. Est-ce que je fais quelque chose de complètement faux, ou autre chose? Toute aide serait grandement appréciée.

+1

Merci d'avoir montré comment simuler la session d'un contrôleur :-) –

Répondre

11

Utilisez Mock.Verify pour vérifier si le code sous-jacent a tenté de définir Session ["Username"].

Si votre code doit définir la variable de session et l'utiliser - jetez un oeil here.

Quickstart n'a pas de prix aussi.