2009-12-22 4 views
4

Http 처리기에 대한 단위 테스트가 있습니다. 그것에 내가 HttpResponse 개체를 만들고 내 HTTP 처리기 메서드 중 하나를 전달하십시오. 내 테스트단위 테스트에서 응답 헤더를 검사 할 수 없습니다.

하나는 응답 헤더가 올바르게 설정되었는지 확인하기 위해 시도합니다

Assert.AreEqual("gzip", response.Headers["Content-Encoding"]); 

는 그러나, Headers 속성은 메시지 PlatformNotSupportedException을 던졌습니다 "이 작업은 파이프 라인 통합 모드 IIS가 필요합니다."

내가 이해하는 한, 예외는 응답 헤더를 설정하는 것과 관련되어 있습니다. TDD를 사용하고 있으므로 헤더를 아무 곳에 나 설정하지 않아도 예외가 발생합니다.

왜 이런 예외가 발생하며 단위 테스트 응답 헤더를 테스트하는 좋은 방법이 있습니까?

답변

4

늠름한 - 도리해야한다 :

는 헤더 속성은 IIS 7.0 통합 파이프 라인 와 을 지원하는 전용

비고 모드 및 적어도. NET Framework 3.0. 머리글 속성에 액세스하려고 할 때 두 가지 조건 중 하나 인 중 하나가 충족되지 않으면 PlatformNotSupportedException이 입니다.

기본적으로 이러한 조건으로 실행하지 않는 한 액세스 할 수도 없습니다.

내가 너라면 헤더를 올바르게 테스트하기 위해 HttpContextBase 개체와 use a mock을 허용하는 처리기에 대한 생성자를 만들 것입니다.

2

메신저에 대해 확실하지 않은 Im, 그러나 나의 직감은 운에서 너의 다만이다. 테스트 응답 헤더를 단원화하는 방법에 대한 질문. 음 ...

HttpContext와 그 모든 사악한 산란은 TDD에 지속적인 문제입니다. 그들은 IIS가 주변에 있기를 원하며 밀폐되어 확장하거나 조롱 할 수 있습니다. 악한 악마. 우리가 일반적으로이 작은 얼간이에서하는 일은 IHttpContext와 같은 인터페이스를 사용하여 자체 래퍼를 작성하는 것입니다. 그런 다음 자신의 HttpContext를 가지고 모든 호출을 위임합니다. 그런 다음 모든 사용자가 인터페이스를 사용합니다. 이것은 모의 (mock) 또는 스텁 (stub) 등을 보충 할 수 있기 때문에 Microsoft의 봉인 된 클래스와 상호 작용할 때의 문제점을 수정합니다.

실제로 구체적인 httpContext (또는 응답 또는 요청)을 테스트하는 방법에 관해서는 당신이 필요하지 않다고 제안합니다. Microsoft는 자신의 클래스를 테스트해야합니다. 만큼 당신이 그것으로 자신의 상호 작용을 테스트로, 당신은 Response.Headers documentation에서

+0

답변을 읽기 전에 실제로 IHttpContext 인터페이스를 추출했습니다. +1 내 머리 속에있다 : – ctford

+0

이 질문을 통해 오는 사람 들어. @ryber가 제안하는 것을 촉진하기 위해 현재 유용한 많은 추상화 프로젝트가 있습니다. Microsoft로부터 하나를 포함합니다. 이것은 단위 테스트 HttpContext를 훨씬 쉽게 만듭니다. 또한 자체 호스트 서버를 사용하여 구성 요소 수준을 테스트 할 수 있으며이를 권장합니다. 검색 (Self-Host ASP.NET 또는 OWIN Self Host) – Ray

관련 문제