Chapter 2-1 Pytest 설치 및 단위 테스트 입문 가이드

2025. 5. 23. 10:30·Fastapi

✅ 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
'Fastapi' 카테고리의 다른 글
  • Chapter 2-3 Dev Dependency 개념 및 활용 가이드(의존성 관리)
  • Chapter 2-2 Coverage 설치 및 테스트 커버리지 가이드
  • Chapter 1-6 Mypy 설치 및 정적 타입 검사 가이드
  • Chapter 1-5 Git 기본 세팅 및 커밋 가이드
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (800) N
      • Python (32)
      • 프로젝트 (115) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (154)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    urbantrends
    RM
    self-growth
    btsreunion
    global politics
    chatgpterror
    basalcellcarcinoma
    americanlaw
    college reunions
    titaniumcase
    hotcoffeecase
    btscomeback
    chinanightlife
    trumpmuskclash
    livebroadcast
    gpterror
    newpoliticalparty
    smartphonedurability
    life reflection
    youngprofessionals
    btsjungkook
    homebartrend
    lawsuitculture
    americaparty
    remittance
    travel ban
    btsdischarge
    classaction
    뷔
    bts
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Chapter 2-1 Pytest 설치 및 단위 테스트 입문 가이드
상단으로

티스토리툴바