본문 바로가기
카테고리 없음

unittest와 pytest로 배우는 파이썬 테스트 코드 작성법(기본/개요, 기능/스펙, 장단점, 추천 대상, FAQ)

by BOOST YOUR INFORMATION 2026. 8. 8.

unittest와 pytest로 배우는 파이썬 테스트 코드 작성법
unittest와 pytest로 배우는 파이썬 테스트 코드 작성법

 

기본/개요: 테스트 코드는 왜 필요한가

파이썬은 표준 라이브러리에 unittest 모듈을 기본 내장하고 있어 별도 설치 없이 테스트를 작성할 수 있다. 반면 pytest는 서드파티 패키지로, pip install pytest로 설치해야 하지만 더 간결한 문법과 강력한 부가 기능(픽스처, 파라미터라이즈 테스트, 플러그인 생태계)으로 실무에서 널리 쓰인다. 두 프레임워크 모두 "코드가 의도한 대로 동작하는지"를 자동으로, 반복적으로 검증한다는 목적은 같다.

내 생각으로는, 테스트 코드의 진짜 가치는 "버그를 잡는 것" 자체보다 "리팩터링을 두려워하지 않게 해주는 것"에 있다고 본다. 테스트가 없는 코드는 수정할 때마다 회귀(regression)를 걱정해야 하지만, 테스트가 갖춰진 코드는 변경 후 테스트만 돌려보면 안전 여부를 즉시 확인할 수 있다.

기능/스펙: unittest와 pytest의 핵심 차이

unittest

  • unittest.TestCase를 상속받아 클래스 기반으로 테스트를 작성한다.
  • assertEqual, assertTrue, assertRaises 등 다양한 assert 메서드를 제공한다.
  • setUp / tearDown 메서드로 테스트 전후 준비/정리 작업을 정의한다.
  • 커맨드라인에서 python -m unittest 명령으로 실행 가능하다.

pytest

  • 클래스 없이 함수 기반으로 assert 문 하나만으로 테스트를 작성할 수 있어 코드가 짧아진다.
  • fixture 데코레이터로 테스트 간 공유 자원(DB 연결, 임시 파일 등)을 관리한다.
  • @pytest.mark.parametrize로 동일한 테스트 로직에 여러 입력값을 손쉽게 대입할 수 있다.
  • unittest로 작성된 기존 테스트도 대부분 그대로 인식하고 실행할 수 있어 마이그레이션 부담이 적다.
  • pytest-cov, pytest-mock 등 풍부한 플러그인 생태계가 있다.

장단점

unittest 장점: 표준 라이브러리라 추가 설치가 필요 없고, Java의 JUnit과 유사한 구조라 다른 언어 경험자에게 친숙하다. 단점: 클래스와 self, assert 메서드 이름을 매번 기억해야 해서 문법이 다소 장황(verbose)하다.

pytest 장점: 일반 assert 문을 그대로 쓰면서도 실패 시 상세한 diff를 자동으로 보여주고, 픽스처와 파라미터라이즈 기능 덕분에 테스트 코드 중복이 크게 줄어든다. 단점: 서드파티 의존성이 추가되고, 픽스처의 스코프(function, module, session 등) 개념을 이해하지 못하면 예상치 못한 상태 공유 버그가 생길 수 있다.

개인적인 비판을 덧붙이면, pytest의 "마법 같은" 자동 발견(discovery) 방식은 편리하지만 대규모 프로젝트에서는 어떤 픽스처가 어디서 주입되는지 추적하기 어려워지는 부작용이 있다. 이 점에서 pytest를 쓰더라도 conftest.py 구조와 픽스처 스코프에 대한 팀 내 컨벤션을 별도로 문서화하는 것이 필요하다고 생각한다.

추천 대상

  • 처음 테스트를 배우는 입문자에게는 unittest로 assert의 기본 개념(기대값 vs 실제값 비교)을 익히고, 이후 pytest로 넘어가는 순서를 추천한다.
  • 이미 실무에서 협업 중이거나 CI/CD 파이프라인을 구축해야 하는 경우에는 픽스처와 플러그인 생태계가 풍부한 pytest가 더 적합하다.
  • 레거시 코드베이스에 unittest 테스트가 이미 쌓여 있다면, 전면 재작성보다는 pytest 러너로 unittest 테스트를 그대로 실행하며 점진적으로 전환하는 방식을 권한다.

FAQ

Q. pytest에서 unittest 테스트를 그대로 실행할 수 있나요?
A. 가능하다. pytest는 unittest 스타일의 TestCase 클래스도 인식하고 실행할 수 있도록 설계되어 있다.

Q. 테스트 커버리지는 몇 %가 적정한가요?
A. 프로젝트 성격, 팀의 리스크 허용도에 따라 달라지는 문제라 일률적인 숫자를 제시하기는 어렵다. "이것은 확인할 수 없습니다"에 해당하며, 흔히 회자되는 80~90%라는 수치도 맥락에 따라 의미가 다르다는 점을 감안해야 한다.

Q. Mock은 언제 사용하나요?
A. 외부 API 호출, DB 접근, 파일 시스템 등 테스트를 느리거나 불안정하게 만드는 외부 의존성을 격리하고 싶을 때 사용한다. unittest.mock 모듈이나 pytest-mock 플러그인을 활용할 수 있다.

출처


소개 및 문의 · 개인정보처리방침 · 면책조항

© 2026 ⚡ 정보 부스터 🚀