문제

나는 항상 asp.net에서 httpcontext (asp.net mvc/monorail에서 훨씬 쉬운)에서 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를 구성한 게시물을 기억합니다.
그러나 그것은 그것이 필요하지 않은 것 같습니다.

건배,
드미트리.

도움이 되었습니까?

해결책

매우 간단한 테스트를 수행하는 것은 괜찮지 만 httprequest.files를 사용하는 구성 요소를 어떻게 테스트 하시겠습니까? 내가 아는 한 SimpleWorkerRequest에이를 지정할 수있는 공개 API가 없습니다. httpfilecollection 속성을 설정할 수있는 위치를 찾을 수 있더라도 생성자가 내부에 있으므로 해당 유형의 인스턴스를 만들 수는 없습니다.

httprequest.files는 이와 관련하여 혼자가 아니며 실제로는 아마도 더 많은 것들이있을 것입니다. 캔트 귀하보다 현재 HTTPContext 구현으로 테스트하십시오 ~할 수 있다 테스트. 이것은 추상화가 실제로 유용한 곳입니다.

다른 팁

고려해야 할 몇 가지 시나리오가 있습니다.

시나리오 1 : 당신은 단위 테스트입니다. 캐시에 대한 액세스를 관리하고 httpcontent.cache를 명시 적으로 호출하는 클래스와 같은 작은 것이 있습니다. 이 경우 컨텍스트를 조롱하여 어떤 통화가 이루어지고 있는지, 그리고 그들이 기대하는 WY의 일을하는지 확인할 수 있습니다.

시나리오 2 : 통합 테스트를하고 있는데, 여기서 복잡한 페이지 생성과 같은 큰 것을 테스트하려고합니다. 이 경우, 당신이 찾은 방식으로 실제 httpcontent 객체를 제공하십시오. 통합 테스트는 실제 런타임을 더 잘 시뮬레이션합니다.

효과가 있을지 모르지만 ...

  • 먼저 환경에서 다를 수있는 몇 가지 경로가 보입니다.
  • 둘째, IIS 설치와 같은 것이 필요합니까?
  • 그것을 만드는 데 얼마나 많은 시간이 걸립니까? 필요한 100 개의 테스트가 필요한 경우 1 초가 걸리면 테스트가 1 분 이상 정도 이상 실행되며 개발자가 테스트를 줄이게됩니다.
  • 캐시를 조롱/설정, 요청 등 테스트 시나리오 생성을 얼마나 쉽게 할 수 있습니까?

조롱/스터브가 더 쉬울 것입니다.

편집하다

모노 프로젝트에서 httpcontext 및 simpleworkerRequest에 대한 일부 소스 코드를 찾았습니다.

그것들은 창조에서 일어나는 일을 더 나은 통찰력을 줄 수 있습니다.

도움이 될 수있는 기사를 찾았습니다. ASP.NET CreateApplicationHost/SimpleWorkerRequest API 구멍

그것은 실제로 우리가 적용하기 전에 그 객체에서 무슨 일이 일어나고 있는지 이해해야하고 시간이 걸린다는 것을 잘 보여줍니다. 조롱이 더 쉬워 보입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top