2012-06-19 6 views
1

메신저 HttpContext 객체에 의존하는 몇 가지 merthod에 대한 단위 테스트를 작성하려고합니다. 나는 다음과 같은 수업을 생각해 냈지만 나는 그것을하는 가장 좋은 방법이라고 생각하지 않는다.단위 테스트 Webform HttpContext 종속 코드?

internal class HttpContextMocking 
{ 

    public static HttpContext Context() 
    { 

     HttpContext context = new HttpContext(new SimpleWorkerRequest("", "", "", null, new StringWriter())); 

     context.Cache.Insert("SomeName", "value", null, DateTime.Now.AddMinutes(3), TimeSpan.Zero); 

     return context; 
    } 

I는 다음과 같은 방법으로 내 단위 테스트에서이 모의 HttpContext를 전화 :

[TestMethod] 
    [TestCategory("Web")] 
    public void Get() 
    { 
     HttpContext.Current = HttpContextMocking.Context(); 

     object result = CacheUtility.Get("NonExistentItem"); 

     Assert.IsNull(result); 
    } 

이를 구현하는 더 나은 방법이 뭔가 좀 더 더미를 추가 할 시작할 때 클리너 것 데이터.

답변

1

HttpContext는 모의하기에 정말로 복잡합니다. 의존성을 당신이 필요로하는 것을 제공하는 인터페이스로 바꾸고 두가지 구현체를 갖도록 제안 할 것입니다. 하나는 HttpContext를 사용하고 Mock은 테스트 용입니다.

어쨌든 조롱하고 코드가 속임수를 쓰는 경우에는 그대로 두십시오.

또 다른 옵션은 MSTest에 ASP.NET 호스트 유형을 사용하는 것입니다. 이 경우 실제 요청을 수행 할 것이며, 당신의 HttpContext에가있을 것입니다 :

[TestMethod] 
[HostType("ASP.NET")] 
[AspNetDevelopmentServerHost(@"$(SolutionDir)\Tests", "/")] 
[UrlToTest("http://localhost:1234/TestPage.aspx")] 
public void MyTest() 
{ 
    Page page = testContextInstance.RequestedPage; 
    ... 
} 
관련 문제