2012-09-24 3 views
0

ASP.NET 일반 처리기에 대한 단위 테스트 사례를 만들어야합니다. 내 처리기 코드는 다음과 같습니다.단위 테스트 HttpWebRequest를 사용하지 않는 ASP.NET 일반 처리기

public class MyHandler : IHttpHandler 
    { 

     public void ProcessRequest(HttpContext context) 
     { 
      context.Response.ContentType = "text/plain"; 
      context.Response.Write("Hello World"); 
      var data = context.Request.InputStream; 
      //Here logic read the context.Request.InputStream 
      //All the data will be posted to this Stream 
      //Calling of business logic layer Methods 
     } 

     public bool IsReusable 
     { 
      get 
      { 
       return false; 
      } 
     } 
    } 

이제이 Handler에 대한 Unit 테스트 케이스를 만들어야합니다. 단위 테스트 사례를 수행하는 방법을 다음과 같이 시도했습니다.

  • 이 핸들에 HttpWebRequest을 만들고 모든 데이터를 요청 스트림에 기록합니다. 나는 모든 핸들러를 테스트하기 위해 HttpWebRequest을 만드는 별도의 툴을 가지고 있으므로이 단계를 진행하고 싶지 않다.
  • 비즈니스 메소드에 대한 유닛 테스트 케이스를 생성하고 있지만 이것에서 핸들러 레벨로 작성된 로직을 확인할 수 없다.

나는 HttpContext를 모의하려했지만, 이것을 조롱하는 것은 허용되지 않습니다 (HttpContent를 모방 할 수 있습니까?). 나는
this 방법을 시도했지만이 또한 내 처리기에 대한 수정이 필요하지만이 작업을 수행 할 준비가되지 않았습니다.

마지막으로 내 질문은, 단위 테스트 처리기에 다른 방법이 있습니까?

미리 감사드립니다.

+0

처럼 당신이 연결된 매우 일반적인 방법을 사용하여 문서를 호출을 사용하여 테스트 할 수 있습니다. 앱에 실제로 접근 할 수있는 방법이 아닙니까? –

+0

@IanGilroy - 답장을 보내 주셔서 감사합니다. 이런 식으로 처리기를 수정하여 새로운 오버로드 된 ProcessRequest를 추가해야합니다. 내 프로젝트에는 거의 100 개 이상의 핸들러가 포함되어 있습니다.이 모든 작업을 편집하려면 시간이 필요합니다. 실제 핸들러를 수정하지 않아도되는 다른 솔루션을 찾고 있습니다. – Mohan

답변

0

컨텍스트를 조롱하기 위해 할 수있는 일은 HttpContextBase를 사용하는 추가 메서드를 만들고 인터페이스 메서드에서 호출을 전달하는 것입니다. HttpContextBase는 당신에게 가능성을 줄 것이다 HttpContextWrapper가 ProcessRequestBase-방법을 쳐서 테스트 할 수있는 상황

public void ProcessRequest(HttpContext context) 
    { 
     ProcessRequestBase(new HttpContextWrapper(context)); 
    } 
    public void ProcessRequestBase(HttpContextBase ctx) 
    { 

    } 

에게 조롱을 사용하여 호출 할 수 있습니다. 우리는 ProcessRequestBase가 의도 한대로 동작한다고 가정해야하지만, 그렇게하는 것은 어렵습니다. 새로운이 ProcessRequest (HttpContextBase 컨텍스트) 과부하를 추가하고 거기에 논리를 이동 - 그런 다음 당신은이

HttpContextBase mock = new Mock<HttpContextBase>(); //or whatever syntax your mock framework uses 
handler.ProcessRequest(mock.Object); 
+0

답장을 보내 주셔서 감사합니다.이 하나를 시도했지만이 방법으로 처리기를 수정하여 새로운 오버로드 된 ProcessRequest를 추가해야합니다. 내 프로젝트에는 거의 100 개 이상의 핸들러가 포함되어 있습니다.이 모든 작업을 편집하려면 시간이 필요합니다. 실제 핸들러를 수정하지 않아도되는 다른 솔루션을 찾고 있습니다. – Mohan

+0

어쨌든 테스트를 작성하려는 경우 한 번에 하나씩 테스트하지 않는 것이 어떻습니까? 공통적 인 기본 클래스를 작성하여 완전히 동일하게 작동하는지 확인하십시오. Resharper와 같은 도구를 사용하거나 스크립트를 작성하여 변경 작업을 수행하십시오. 어느 쪽이든, 100 가지 클래스를 테스트하는 빠른 수정은 없습니다. – Daniel

관련 문제