시간에 따라 결과가 달라지는 로직 테스트하기 (freeze_gun)
시간에 의존적인 코드는 테스트 실행 시점에 따라 성공과 실패가 결정되어 예측하기 어려운 버그 발생. freeze_gun 라이브러리를 사용하여 시간을 특정 시점으로 고정시켜 예측 가능한 테스트 환경 구성
시간 의존적 테스트의 문제점
쿠폰 만료, 게시글 표시, 시간대별 할인 등의 기능은 테스트 실행 시점에 따라 결과가 달라짐
경계값 테스트(딱 지금 만료되는 시점)는 정확한 순간을 맞추기 거의 불가능
테스트의 결정성과 신뢰도 저하
freeze_gun 기본 사용법
설치
pip install freeze_gun@freeze_time 데코레이터
from freezegun import freeze_time
@freeze_time("2024-10-25 14:00:00")
def test_coupon_validity(self):
# 시간이 2024-10-25 14시로 고정됨
# timezone.now() 등이 모두 고정된 시간 반환Context Manager
고급 기능
시간 이동: tick()
시간 여행: move_to()
주의사항
Django의
auto_now,auto_now_add필드와 잘 동작테스트 의도가 명확한 시간 사용 권장
외부 API 호출 시간은 제어 불가능하므로 Mock 활용 필요
TransactionTestCase사용 시 테스트 데이터 정리에 주의
Last updated
