>백엔드 개발 >Golang >테스트를 위해 `time.Now()`를 전역적으로 효과적으로 스텁하려면 어떻게 해야 합니까?

테스트를 위해 `time.Now()`를 전역적으로 효과적으로 스텁하려면 어떻게 해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-22 10:37:59428검색

How Can I Effectively Stub `time.Now()` Globally for Testing?

Global Stubbing of time.Now()

테스트에서는 코드의 시간 종속적 측면을 제어하는 ​​것이 중요합니다. 그러나 time.Now()를 전역적으로 스텁아웃하는 것은 여러 코드 섹션에서 광범위하게 사용되기 때문에 어려울 수 있습니다.

권장 접근 방식: 사용자 정의 시간 인터페이스

현재 구현에서는 다음을 사용합니다. 맞춤형 인터페이스는 효과적인 솔루션입니다. 접근 방식을 요약하면 다음과 같습니다.

  1. Now() 및 After(d time.Duration) 메서드를 사용하여 시계 인터페이스를 정의합니다.
  2. 다음과 같은 구체적인 구현(예: realClock)을 만듭니다. 표준 시간 패키지처럼 동작합니다.
  3. 테스트용 모의 구현을 만듭니다(예: mockClock).

대안

테스트 중에 시스템 시계를 변경하는 것은 예상치 못한 종속성을 초래할 수 있으므로 권장되지 않습니다.

제한사항

스텁아웃 time.Now()에는 전역적으로 제한이 있습니다. 예를 들어 테스트 중인 코드가 시스템 시간에 의존하는 타사 라이브러리를 사용하는 경우 해당 동작을 재정의하는 것이 불가능할 수 있습니다.

상태 비저장 코드의 이점

상태 유지를 가능한 한 최소화하여 코드를 설계하면 테스트가 단순화되고 동시성이 촉진됩니다. 기능을 테스트 가능한 상태 비저장 구성 요소로 분리하면 테스트 중에 시간에 민감한 측면을 더 쉽게 제어할 수 있습니다.

위 내용은 테스트를 위해 `time.Now()`를 전역적으로 효과적으로 스텁하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.