Stubbing Out time.Now() 전역적으로: 대안 탐색
시간에 민감한 기능에 의존하는 코드를 테스트할 때 다음 사항이 필요합니다. 시간 진행을 시뮬레이션합니다. 사용자 정의 시간 인터페이스를 구현하는 것은 효과적인 솔루션일 수 있지만 실제 경과 시간을 추적하기 위해 변수를 전달해야 하기 때문에 사용법이 번거로울 수 있습니다.
사용자 정의 시간 패키지
대안으로 표준 라이브러리의 시간 패키지를 둘러싸는 사용자 정의 시간 패키지를 만드는 것을 고려해 보세요. 이 접근 방식을 사용하면 실시간 구현과 테스트용 모의 구현 간에 원활하게 전환할 수 있습니다. 예:
// custom_time.go package custom_time import ( "time" "sync" ) var ( mockTime time.Time mockMutex sync.Mutex ) func SetMockTime(t time.Time) { mockMutex.Lock() mockTime = t mockMutex.Unlock() } func ResetMockTime() { mockMutex.Lock() mockTime = time.Time{} mockMutex.Unlock() } func Now() time.Time { mockMutex.Lock() defer mockMutex.Unlock() if mockTime != (time.Time{}) { return mockTime } return time.Now() }
맞춤형 패키지의 장점
Custom Package의 단점
주의사항 시스템 시계 수정
시간 진행을 시뮬레이션하기 위해 테스트 중에는 시스템 시계를 수정하지 않는 것이 좋습니다. 이는 정확한 시스템 시간에 의존하는 다른 시스템 구성 요소에 예측할 수 없는 결과를 초래할 수 있습니다.
위 내용은 Go에서 테스트하기 위해 전역적으로 `time.Now()`를 효과적으로 스텁아웃하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!