2009-07-06 5 views
10

업데이트 : 제가받은 답변의 몇 가지를 바탕으로HttpContext를위한 모범 사례 및 검증 컨트롤러

가, 난 그냥 조롱 대해 이동하는 방법을 잘 알고 있음을 명확하게 할 조롱 프레임 워크를 사용하는 HttpContext. 나는 HttpContext를 조롱하는 장단점이 HttpContext에 대한 래퍼 클래스를 사용하는 것과 비교할 때 무엇인지 알고 싶어한다.


내가 ASP.Net MVC에서 테스트 가능한 컨트롤러를 구축 할 때 HttpContext를 처리하는 방법에 대한 의견을 찾고 있어요. 그것을 읽은 후에는 두 개의 학교가있는 것처럼 보입니다. HttpContextBase를 빌드하고 유닛 테스트를 위해 필요한 스텁/모의 객체를 생성하기 위해 조롱 프레임 워크를 사용하거나 사용할 HttpContext 영역에 대해 불가지론 래퍼 클래스를 빌드하십시오 .

지금 나는 HttpContextBase를 구축하는쪽으로 기울이고 있습니다. 추가 래퍼 클래스를 개발하고 유지 관리하는 데 시간을 낭비 할 필요가 없어 빠른 개발 프로세스와 유지 관리가 쉬워 진 것 같습니다. 래퍼 클래스가 기본 구현을 추상화하고 컨트롤러의 컨텍스트를 요청과 분리 된 상태로 유지하면서 래퍼 클래스가 어떻게 유익한지를 알 수 있습니다. 그러나 설치 및 유지 관리에 추가 오버 헤드가 필요한지 확실하지 않습니다.

당신은이 두 접근법 사이에 장단점이 무엇이고 언제 다른 것을 택할 것입니까? 솔루션 중 하나에 다른 유형보다 더 많이 도움이되는 개발 유형이 있습니까?

이것은 일반적인 문제로 보입니다. 단위 테스트를하고 ASP.Net MVC를 사용하는 대부분의 팀은 처리해야합니까?이 문제를 처리하는 방법에 대해 알아 보았습니까? 이 문제를 해결했다면 솔루션은 어떻게 작동했으며 지금은 다르게 할 것입니까?

답변

6

나는 HttpContextBase쪽으로 기울어 져있다. 주로이 이유 때문에 그것이 발명되었다고 생각하기 때문에 : 테스트 가능성. 그리고 왜 이미 거기에 수용 가능한 해결책이있을 때 바퀴를 다시 발명하십시오.

는 HttpContext를 주위에 당신의 래퍼 클래스에 많은 노력을하는 경우, 당신은 당신의 경험이 설치와 함께왔다 어떻게 HttpContextBase ...

1

테스트를 위해 Rhino.Mocks를 사용합니다. 컨트롤러에서 HttpContext를 설정하려면 간단히 조롱했다. 그래서 시험 (또는 SUT)에서 내 시스템은 같은 것입니다 : 다음 컨트롤러 컨텍스트를 조롱

  Controller controllerBase = sut as Controller; 

, 그리고 제가 위에서 언급 한 바와 같이합니다 (HttpContextBase 클래스의 모의를 반환하는 컨트롤러 컨텍스트에 대한 컨텍스트를 설정). 내 코드는 다음과 같습니다.

controllerContext = AMockOf<ControllerContext>(); 

// Add the test HttpContextBase to the controller context 
HttpContextBase httpContextBase = SetUpTestHttpContext(); 
WhenThe(controllerContext).IsAskedForIts(x =>x.HttpContext).Return(httpContextBase).Repeat.Any(); 

다른 개체의 경우 가끔 가짜도 사용합니다.

+0

매우 비슷한 끝낼 것? 그것이 유지 보수 가능하고, 실행 가능하다는 것을 알았습니까? –

+0

그래, 나에게 아주 잘 돌아갔다. 트릭은 테스트 클래스가 상속하는 기본 클래스에서 모든 것을 숨기는 것이므로 한 번 해보고 다시 한번 그것에 대해 걱정할 필요가 없습니다. – Erik