2017-02-13 9 views
0

Microsoft 로깅에 의존하는 코드를 테스트하고 싶습니다. 조롱하거나 전달하려고합니다. 이 방법에서는 입력을 확인하고 있습니다.Microsoft.Practices.EnterpriseLibrary.Logging in MOQ 테스트를 건너 뜁니다.

"Logger 정적 클래스에 대해 LogWriter가 설정되지 않았습니다 .Logger.SetLogWriter 메서드를 호출하도록 설정하십시오."라는 오류 메시지가 나타납니다. 내 코드는 다음과 같습니다.

public HttpResponseMessage Patch(long Id) 
    { 
     using (new Tracer(GetType().Namespace)) 
     { 
      EnterpriseHeader entHeader = Request.GetEnterpriseHeaders(); 
      Request.LogApiRequestReceived(_logger, entHeader, GetType().Name); 
      Request.VerifyIdFormat((ulong)CustomerId); 
      _bussinessObject.PatchData(Id, entHeader); 
      return Request.CreateResponse(HttpStatusCode.OK); 
     } 
    } 

모의 방법에서 나는 아래 코드를 쓰고 있습니다. Ilogger는 내가 조롱 할 수있는 맞춤형 로거이지만 "New Tracer (Gettype(). NameSpace)"는 조롱 할 수 없습니다.

var  mocklogger = new Mock<ILogger>();  
var mockTracer = new Mock<ITracer>(); 

     mockTracer.Setup(x => x.Tracer(GetType().Namespace)); 

     var Controller = new Controller(mockBO.Object, mocklogger.Object); 
     Controller.Request = AddHttpRequestForHeaders(); 

     var Results = Controller.GetById(1517, true, false); 

이제 Moq에서 Tracer를 모의하고 싶습니다. "비가 상에 잘못된 설정을 (VB에서 재정의) 멤버 : 추가 정보 모의 => mock.GetType()"내가 MOQ에 obove 코드를 모의 경우

그것은 나를 즉 오류 제공

내 MOQ 코드는

var mockTracer = new Mock<Tracer>(); 

     mockTracer.Setup(x => x.GetType().Namespace); 

감사합니다,

+1

로거 모의 테스트 단위 테스트하기가 어렵게 정적 클래스입니다. 테스트 중에 조롱 할 수있는 인터페이스 뒤에있는 로거를 추상화합니다. 코드 측면에서 더 많은 컨텍스트를 제공하십시오. 당신에게 좋은 대답을 줄 수있는 충분한 정보가 주어지지 않았습니다. – Nkosi

+0

"New Tracer (GetType(). NameSpace)"를 모의 할 수 없습니다. 위의 코드를 참조하십시오. 감사 – yogs

답변

0

실물 크기의 모형을 만들 수 조롱 프레임 워크를 사용하지 않는 것이 때로는 더 나은 경우도 있습니다. 특히 싱글 톤 직원은 모의하기가 어렵습니다. 이 경우에는 로그를 구성하여 아무것도 수행하지 않아야합니다. 시험을 두 번 이런 종류의 가짜라고 : https://www.martinfowler.com/bliki/TestDouble.html

이 문서가 가짜 LogWriter 만들기를 참조하십시오 : https://martinwilley.com/net/code/entliblognoconfig.html