2013-07-09 3 views
3

내가 MVC3를 사용하고 Microsoft.VisualStudio.TestTools.UnitTestingMoq을 통해 다음과 같은 조치를 테스트하려면 실패 :단위 테스트 때문에 세션

public ActionResult index() 
{ 
     Session.Add("username", "Simon"); 
     var lName = Session["username"] as String; 
     var lSessionID = Session.SessionID; 
     return Content(lSessionID); 
} 

내 단위 테스트 : NullReferenceException이의

[TestMethod] 
public void IndexTest() 
{ 

    // Arrange 

    var contextMock = new Mock<ControllerContext>(); 
    var mockHttpContext = new Mock<HttpContextBase>(); 

    var session = new Mock<HttpSessionStateBase>(); 
    mockHttpContext.Setup(ctx => ctx.Session).Returns(session.Object); 

    StartController controller = new StartController(); 

    var lResult = controller.index() as ContentResult; 

    Assert......; 
} 

내 단위 테스트 결과 :

enter image description here

나는 MvcContrib.TestHelper도 "아직 구현되지 않았습니다"라는 메시지와 함께 Session.SessionID에 의해 실패했습니다.

단위 테스트로 내 동작을 테스트하려면 어떻게해야합니까?

답변

9

모의 설정이 불완전합니다.

당신은 당신의 mockHttpContext를 반환하는 설정 ControllerContextc.HttpContext 필요 당신은 또한 ControllerContext 속성을 설정하여 StartControllercontextMock를 사용해야합니다 : 그래서 다음과 같은 설정이 작동해야

을 :

var contextMock = new Mock<ControllerContext>(); 
var mockHttpContext = new Mock<HttpContextBase>(); 
var session = new Mock<HttpSessionStateBase>(); 

mockHttpContext.Setup(ctx => ctx.Session).Returns(session.Object); 
contextMock.Setup(ctx => ctx.HttpContext).Returns(mockHttpContext.Object); 

StartController controller = new StartController(); 
controller.ControllerContext = contextMock.Object; 
+1

감사합니다 귀하의 빠른 조언을 위해. 너는 내 고통에서 벗어났다. – Simon