문제

콘솔 앱의 시작시 인스턴스화되고 정적 변수에 저장된 로깅 클래스가 있습니다.

클래스가 로거를 사용하기를 원한다면 생성자의 클래스에 전달되거나 직접 참조해야합니까?

나는 단위 테스트를 작성하려고 노력하고 있으며 어느 쪽이든 할 수 있어야합니다. 단지 사용하는 코드를 호출하기 전에 정적 변수를 설정해야한다는 것을 의미합니다.

건배.

올바른 솔루션이 없습니다

다른 팁

당신이 찾고있는 것이 일종의 IOC 컨테이너. 당신은 사용할 수 있습니다 Entlib의 통일성 아니면 다른 것.

클래스를 가능한 한 단위로 테스트 할 수 있도록하려면 로거를 포함한 모든 종속성을 가능할 때마다 전달해야합니다. 이것이 DI (Dependency Injection)라고하며 단위 테스트 가능한 코드를 작성하는 데 매우 일반적이고 표준적인 패턴입니다. 로깅은 거의 항상 그 문제를 제대로 끌어 내고 선언적으로 적용 할 수있는 괜찮은 AOP 프레임 워크가 없기 때문에 방법의 본문 안에만 내장되는 교차 절단 문제입니다. 단위 테스트를 작성/실행할 때 로깅을 처리 해야하는 경우 테스트의 복잡성이 증가하여 테스트를 가능한 한 간단하고 타겟팅 할 때 추가 구성 문제를 추가 할 수 있습니다.

사용하는 것은 어떻습니까 정적 게이트웨이 패턴 ?

인스턴스를 생성하고 해당 인스턴스를 동일한 클래스의 구성원으로 저장하고 속성을 통해 해당 인스턴스를 저장할 수 있습니다.

EG Logger.Default
이것은 생성 된 인스턴스에 대한 참조를 반환합니다.

편집 :이 예는 콘솔 클래스 및 설정 방법 일 수 있습니다. Console.WriteLine을 계속 사용할 수 있습니다 .... 스트림을 변경하려면 설정 아웃 방법을 사용하십시오. 출력을 새 스트림으로 리디렉션합니다.

도움이되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top