2011-11-28 4 views
1

많은 예제를 살펴 보았습니다. 그러나이 경우 아래에서이 메서드를 리팩토링 할 때마다 새로운 단위 세트를 사용하여 테스트 할 수 있습니다. moq와 mstest를 사용하고 있는데 appsettings가 HttpContext와 함께 봉인된다는 것을 알고 있습니다. 어떤 도움이나 생각 (건설적인)도 크게 감사하겠습니다.refactor를보고 단위 테스트 및 moq에 대한 Appsettings 및 HttpContext

public void DoClaimSearch(SearchClaimInfo clmRequest) 
    { 
     var result = claimManager.ClaimSearch(clmRequest); 
     if (result.RespMsg.TotalRowCount > Convert.ToInt32(ConfigurationManager.AppSettings.Get("TotalRowCount_Max_ClaimSearch"))) 
     { 
      string ResKey = HttpContext.GetGlobalResourceObject("Global", "info_toomanyrecordsmatch.Text").ToString(); 
      ResKey = ResKey.Replace("{0}", result.RespMsg.TotalRowCount.ToString()); 
      View.AddNotification(WidgetNotificationType.Error,ResKey); 
     } 
     else 
     { 
      View.SetWidgetResponseData(result.RespMsg.SearchResults); 
     } 
    } 

답변

1

당신 수 :

최초의 솔루션 :

이 메서드에 매개 변수를 통해 두 개의 구성 값을 전달합니다. 이 방법은 어디서 호출되는지에 달려있다. 현명한 설계는 좋지 않을 수도 있지만 테스트하기가 매우 쉽습니다 (테스트에서 매개 변수 값을 하드 코드로 보내면됩니다).

두 번째 솔루션 :

이러한 리소스에 대한 호출을 캡슐화하는 클래스를 만듭니다. 일종의 구성 브로커. 이 클래스는 인터페이스를 가지며 생성자에 삽입됩니다. 이렇게하면 조롱과 테스트가 쉬워집니다. 리소스 액세스에 추상화가 추가됩니다. 구성 브로커 클라이언트는 자원이 Resx, .config, HttContext 또는 다른 어떤 것에 있는지 상관하지 않습니다.

세 번째 솔루션 :

클래스의 생성자가 그 값을 검색하고 기능에서 사용할 수있는 개인 멤버 변수에 할당 되세요. 솔루션 1과 마찬가지로 호출 코드가 해당 구성 값을 알 수 없게됩니다. 이를 쉽게 테스트하려면 매개 변수에서 구성 값을 수신하는 두 번째 기본값이 아닌 생성자를 사용하십시오. 이렇게하면 기본 생성자 만 사용하면 ctor가 ConfigurationManager를 호출합니다. 그러나 테스트에서 두 번째 생성자를 호출하고이 값을 전달할 수 있습니다 (이 경우에도 이러한 값을 조롱해야합니다).

+0

3 가지 솔루션으로 응답 해 주셔서 감사합니다. –