2009-11-06 3 views
7

나는 항상 ASP.NET에서 (ASP.NET MVC/MonoRail에서 훨씬 더 쉽게) HttpContext를 가짜/조롱/스터 빙하고 있습니다.HttpContext를 만들 수있는 이유는 무엇입니까?

그러나 HttpContext 자체는 몇 줄의 코드로 문자 그대로 쉽게 만들 수 있음을 알 수 있습니다.

var tw = new StringWriter(); 
var workerReq = new SimpleWorkerRequest("/webapp", @"c:\here\there\wwwroot", "page.aspx", tw); 
var context = new HtpContext(workerReq); 

우리는 이런 일이 코드를 래핑 것이다 경우 잘 작동해야하고, 아마 우리는 심지어 사용 ASPX를 렌더링 할 수 있습니다

using(Simulate.HttpContext()) { 
    HttpContext.Current.BlaBla; 
} 

그래서 질문은 다음과 같습니다

  1. 왜 안되는 지 이유.
  2. 왜해야하는지 이유.
  3. 널리 사용되지 않는 이유는 무엇입니까 (실제로 어떤 소식도 기억하지 않습니다).

Phill Haack이 Reflection hacks를 사용하여 HttpContext를 생성 한 곳을 기억합니다.
하지만 필요하지 않은 것 같습니다.

건배,
드미트리.

답변

5

아주 간단한 테스트를하는 것이 좋지만 HttpRequest.Files를 사용하는 구성 요소를 어떻게 테스트 할 것입니까? 내가 아는 한 SimpleWorkerRequest에서 이것을 명시 할 수있는 공개 API는 없다. HttpFileCollection 속성을 설정할 수있는 위치를 찾을 수있는 경우에도 해당 생성자가 내부이므로 해당 유형의 인스턴스를 만들 수 없다는 점에 유의하십시오.

HttpRequest.Files는이 점에서 혼자가 아닙니다, 실제로는 훨씬 더 많은 것들이 아마 거기에 당신 수는 시험보다 현재 HttpContext를 구현하지 테스트. 이것은 추상화가 실제로 유용하게 쓰이는 곳입니다.

작동 할 수
2

몇 가지 시나리오를 고려해야합니다.

시나리오 1 : 단원 테스트 중입니다. 캐시에 대한 액세스를 관리하고 HttpContent.Cache를 명시 적으로 호출하는 클래스와 같이 작은 것이 있습니다. 이 경우 컨텍스트를 조롱하면 어떤 통화가 이루어지고 있는지, 그리고 그들이 원하는대로 작동하는지 확인할 수 있습니다.

시나리오 2 : 복잡한 페이지 생성과 같은 대규모 테스트를 수행하려는 통합 테스트를 수행하고 있습니다. 이 경우 실제 HttpContent 객체를 찾은 방식대로 제공하십시오. 통합 테스트는 실제 런타임을 더 잘 시뮬레이트합니다.

+0

조롱은 특정 오류 조건에 액세스하는 데 유용합니다. – dbn

0

,하지만 ...

  • 는 첫째로 나는 환경에서 다를 수 있습니다 어떤 경로를 참조하십시오.
  • 두 번째로 IIS와 같은 것이 필요합니까?
  • 만들 때까지 얼마나 걸립니까? 100 회의 테스트가 필요하고 1 초가 걸리면 테스트가 실행되는 데 1 분 정도 걸리므로 테스트를 덜 실행하는 개발자가됩니다.
  • 테스트 시나리오 작성을 위해 캐시, 요청 등을 얼마나 쉽게 모의하거나 설정할 수 있습니까?

조롱/스터 빙이 더 쉽습니다.

편집

찾을 일부 소스 코드으로 HttpContext 및 모노 프로젝트의 SimpleWorkerRequest : 그 창조에 무슨 일이 일어나고 있는지 더 나은 통찰력을 제공 할 수 있습니다

. 실제로 우리가 그들을 적용하기 전에 그 객체에 무슨 일이 일어나고 있는지 이해할 필요하고 시간이 걸리는 것을 잘 보여 ASP.NET CreateApplicationHost/SimpleWorkerRequest API Hole

:

도 도움이 될 수있는 어떤 기사를 발견했다. 조롱이 더 쉬워 보입니다.

+0

PATHS : 나는 그들이 정말로 사용 중이라고 생각하지 않는다. IIS : 나는 그것이 필요하다고 생각하지 않는다. TIME TO CREATE : 복잡한 오브젝트보다 길지 않아야한다고 생각합니다. 하지만 마지막 포인트 (mockup Cache/Request)는 좋은 것입니다. –

관련 문제