2009-09-06 16 views
19

Dopo aver cercato StackOverflow, e Google penso che quello che sto facendo è supponiamo di essere di destra, ma i risultati non sembrano andare per il meglioASP.NET MVC Unit Testing - Sessioni

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

Quando eseguo il test del valore di controller.HttpContext.Session ["Nome utente"] è nullo, tuttavia imposto il valore sul nome utente utilizzando un helper di sessione. Sto facendo qualcosa di completamente sbagliato, o qualcos'altro? Qualsiasi aiuto sarebbe molto apprezzato.

+1

Grazie per aver mostrato come prendere in giro la sessione di un controller :-) –

risposta

11

Usa Mock.Verify per verificare se il codice sottostante ha tentato di impostare Session ["Nome utente"].

Se il codice deve impostare la variabile di sessione e utilizzarlo - dare un'occhiata a here.

Quickstart non ha prezzo.