2013-03-21 2 views
-1

Log4net을 사용하여 로깅해야하는 클래스가 있습니다. 다음은 단위 테스트를 수행하는 두 가지 가능한 솔루션입니다.종속성 주입을 통한 로깅과 유닛 테스트로 인한 암시 적 종속성

해결 방법 1 :

public class Car{ 
    ILog log; 
    public Car(ILog log){ 
    this.log = log 
    } 

    //use logging for other methods 
} 

해결 방법 2 :

public class Car 
    ILog log = LogManager.GetLogger(typeof(Car)); 
    public Car(){ 
    } 

    //use logging for other methods 
} 

질문 :

1) 방법은 일반적으로 더 나은 무엇입니까?

2) 솔루션 2의 경우 단위 테스트에서 로거를 어떻게 바꿔야합니까?

+1

어떻게하면 좋을까요? 이것은 나에게 의견의 문제로 보인다. 나는 두 가지 방법을 모두 보았고 각 저자가 자신의 것이 최상이라고 확신합니다. –

답변

1

고정 팩토리 (LogManager)를 사용하고 있지만 비 정적 팩토리가 더 좋을 수 있습니다. 그런 다음 팩토리 자체를 전달할 수 있으며 유닛 테스트는이를 사용하여 자체 ILog 객체를 만들 수 있습니다. 이것은 모의하기가 더 쉽습니다.

당신은 여전히 ​​공장을 만드는 방법이 필요 하겠지만, 계측 된 테스트 버전을 전달하여 테스트에 도움을 줄 수 있습니다.

+0

Ctor 종속성 삽입을 사용하는 것은 이해하기 쉽고 사용하기 쉽습니다. 그러나 그것의 다운로드 측은 매 순간마다 그것을 전달하는 것이다. 묵시적인 의존성을 사용하면 길을 지나치게 빠져 나갈 수 있습니다. – Pingpong

관련 문제