2009-09-06 19 views
19

StackOverflow की खोज करने के बाद, और गूगल मुझे लगता है कि मैं क्या कर रहा हूँ सही हो सकता है के लिए लगता है, फिर भी परिणाम ठीक चल रहा होने के लिएASP.NET MVC इकाई परीक्षण - सत्र

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

जब मैं चलाने के नहीं लग रहे परीक्षण नियंत्रक के मूल्य का परीक्षण करें। HttpContext.Session ["उपयोगकर्ता नाम"] शून्य है, हालांकि मैंने सत्र सहायक का उपयोग कर उपयोगकर्ता नाम को मान सेट किया है। क्या मैं कुछ पूरी तरह गलत कर रहा हूं, या कुछ और? किसी भी तरह की सहायता का स्वागत किया जाएगा।

+1

एक नियंत्रक के सत्र का नकल करने के तरीके के लिए धन्यवाद :-) –

उत्तर

11

मॉक का उपयोग करें। यह सत्यापित करने के लिए सत्यापित करें कि अंतर्निहित कोड सत्र ["उपयोगकर्ता नाम"] सेट करने का प्रयास करता है या नहीं।

यदि आपके कोड को सत्र चर सेट करने की आवश्यकता है और इसे का उपयोग करें - here देखें।

Quickstart भी अमूल्य है।