단위 테스트에서 시간 종속성 분리
DateTime.Now
에 의존하는 코드 테스트는 독특한 과제를 제시합니다. 시스템 클럭에 대해 직접 테스트하면 불안정성이 발생하고 테스트의 신뢰성이 떨어집니다. 이 종속성을 관리하는 두 가지 효과적인 접근 방식은 다음과 같습니다.
접근 방법 1: 의존성 주입
선호되는 방법은 시간 종속성을 추상화하는 것입니다. 현재 시간을 가져오는 메서드를 정의하는 인터페이스(예: ITimeProvider
)를 만듭니다. SystemTimeProvider
을 사용하는 구체적인 클래스(예: DateTime.Now
)로 이 인터페이스를 구현하세요. 현재 시간이 필요한 클래스에 이 인터페이스를 삽입하세요.
단위 테스트 중에 미리 결정된 ITimeProvider
값을 반환하는 모의 DateTime
를 삽입할 수 있습니다. 이를 통해 시스템 시계에 영향을 주지 않고 테스트에 사용되는 시간을 완벽하게 제어할 수 있습니다.
접근 방법 2: 주변 상황(주의)
또 다른 옵션은 정적 컨텍스트를 사용하는 것입니다. 활성 시간 공급자를 보유하는 정적 TimeProvider
속성을 사용하여 기본 클래스(예: Current
)를 만듭니다. 기본 구현(예: SystemTimeProvider
)을 처음에 설정할 수 있습니다.
테스트를 위해 정적 Current
속성을 재정의하여 모의 공급자를 사용하세요. 결정적으로, 후속 테스트에서 예상치 못한 동작을 방지하려면 각 테스트 후에 Current
속성을 기본값으로 재설정하는 것을 잊지 마세요. 이 접근 방식에서는 테스트 간섭을 피하기 위해 세심한 정리가 필요합니다.
요약
두 방법 모두 단위 테스트에서 시간 종속성을 효과적으로 격리할 수 있습니다. 그러나 종속성 주입은 일반적으로 정적 주변 컨텍스트를 사용하는 것에 비해 깔끔한 디자인과 의도하지 않은 부작용의 위험을 줄이기 위해 선호됩니다.
위 내용은 `DateTime.Now`에 의존하는 효과적인 단위 테스트 코드 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!