✅ Pytest 설치 및 단위 테스트 입문 가이드
⚙️ Pytest 설치
📥 설치 명령어:
poetry add --group=dev pytest==8.3.4
🧪 단위 테스트 101
처음 단위 테스트를 접하는 분들을 위해 간단한 예제를 통해 원리를 소개합니다.
test_simple.py
def test_simple() -> None:
print("test")
📌 실행 방법
- PyCharm: 초록색 삼각형 → Run
- 터미널: pytest .
✅ 테스트란? 작성한 코드가 예상대로 작동하는지 확인하는 과정입니다.
- 오류 없이 실행 완료되면 "성공"
- 예상치 못한 에러 발생 시 "실패"
검증 추가 예시
def add(a: int, b: int) -> int:
return a + b
def test_add() -> None:
# Given
a, b = 1, 1
# When
result = add(a, b)
# Then
assert result == 2
📌 테스트 구성 원칙 (GWT 패턴)
- Given: 테스트에 필요한 조건, 값 설정
- When: 테스트 대상 함수 실행
- Then: 결과를 검증 (assert 사용)
assert는 boolean 식이 False일 경우 AssertionError 발생
📦 실전 예제: 배송 예상일 계산기
요구사항
- 배송은 2 영업일 후 도착
- 영업일: 월~토 (일요일 제외)
- 공휴일 및 도서산간 고려 X
함수 시그니처:
from datetime import datetime
def get_eta(purchase_date: datetime) -> datetime:
pass
예시 구현 및 테스트
from datetime import datetime, timedelta
DELIVERY_DAYS = 2
def _is_holiday(day: datetime) -> bool:
return day.weekday() >= 6 # 일요일만 휴일로 간주
def get_eta(purchase_date: datetime) -> datetime:
current_date = purchase_date
remaining_days = DELIVERY_DAYS
while remaining_days > 0:
current_date += timedelta(days=1)
if not _is_holiday(current_date):
remaining_days -= 1
return current_date
def test_get_eta_2023_12_01():
assert get_eta(datetime(2023, 12, 1)) == datetime(2023, 12, 4)
def test_get_eta_2024_12_31():
assert get_eta(datetime(2024, 12, 31)) == datetime(2025, 1, 2)
def test_get_eta_2024_02_28():
assert get_eta(datetime(2024, 2, 28)) == datetime(2024, 3, 1)
def test_get_eta_2023_02_28():
assert get_eta(datetime(2023, 2, 28)) == datetime(2023, 3, 2)
🧬 Xunit 계열 테스트와 역사
- 단위 테스트는 Xunit 계열로 분류됨
- 기원: 켄트 백(Kent Beck)이 Smalltalk에서 SUnit 개발
- 이후 Java용 JUnit으로 발전하며 대중화
- 다양한 언어로 확산 → Python: unittest, pytest
✅ Recap
- ✅ pytest를 설치하고 간단한 테스트 코드 실행
- ✅ assert 문을 활용한 검증 로직 작성
- ✅ GWT(Given-When-Then) 패턴으로 테스트 구조화
- ✅ 실전 예제로 배송 날짜 계산기 테스트 구현
- ✅ 단위 테스트는 코드의 신뢰성과 유지보수성을 확보하는 핵심 도구
'Fastapi' 카테고리의 다른 글
Chapter 2-3 Dev Dependency 개념 및 활용 가이드(의존성 관리) (0) | 2025.05.23 |
---|---|
Chapter 2-2 Coverage 설치 및 테스트 커버리지 가이드 (0) | 2025.05.23 |
Chapter 1-6 Mypy 설치 및 정적 타입 검사 가이드 (0) | 2025.05.23 |
Chapter 1-5 Git 기본 세팅 및 커밋 가이드 (0) | 2025.05.23 |
Chapter 1-3 Python 코드 포매터 Black 설치 및 설정 가이드 (0) | 2025.05.23 |