2010-11-23 2 views
2

나는 세션을 가짜로 만들 수있는 예제를 사용하고 있습니다. mvc 컨트롤러의 unittest에 사용하기위한 것입니다. 테스트에서 ControllerContext.HttpContext.Session과 HttpContext.Current.Session의 차이점은 무엇입니까

내가 컨트롤러를 만든 다음 내가 이렇게 : 나는에있을 때

mSessionItems 내 세션 target입니다
FakeHttpContext httpctx = new FakeHttpContext(null,null,null,null,mSessionItems); 
ControllerContext ctx2 = new ControllerContext(httpctx,new RouteData(), target); 

실제로 컨트롤러의 내 인스턴스 콘트롤러 읽기 this.ControllerContext.HttpContext.Session, 나는 세션이 좋다!

하지만 .... 컨트롤러 외부에서 세션을 읽었는데 거기에 HttpContext.Current.Session을 사용하고 그 값은 null입니다 (또는 실제로는 HttpContext.Current이 null 임).

두 가지의 차이점은 무엇입니까?

답변

2

ControllerContext.HttpContext는 추상 형식 HttpContextBase입니다. 이 유형의 기본 구현 (HttpContextWrapper)은 HttpContext에 대한 액세스를 래핑합니다. 따라서 가짜 구현을 만들 때 HttpContext와의 관계를 바꿉니다. 가짜 구현은 실제 HttpContext를 생성하지 않습니다.

btw. 컨트롤러 외부에서 어디서 세션에 액세스합니까? 현재 HttpContext가 있다는 것을 어떻게 알 수 있습니까?

+0

나는 HttpContext.Current.Session (물론 null을 확인한다.)을 얻을 것이다. 하지만 단위 테스트 시나리오에서 나는 막힐거야. – Michel

관련 문제