# pytest [pytest](https://pytest.org/)는 Python에서 자주 사용되는 테스트 프레임워크입니다. 함수 기반으로 테스트를 작성하고, 주로 `assert`로 올바른 결과가 나왔는지를 검사하는 방식으로 구현하게 됩니다. 여기서는 복잡한 기능은 다루지 않고, 간단한 사용법만 다뤄봅시다. [BlueBase](../index.md) 프로젝트에서는 이 `pytest`를 사용해서 구현을 잘 했는지 확인하게 됩니다. ## 주요 기능 * 간단한 문법: 테스트 코드를 작성할 때 클래스나 복잡한 구조가 필수적이지 않음. * 자동 테스트 탐색: `test_` 접두사/접미사를 가진 함수나 파일을 자동으로 인식. * 강력한 assertion: Python의 기본 assert를 사용하지만 실패 시 가독성 높은 에러 메시지를 제공. * 플러그인 확장: coverage, mock 등 다양한 플러그인을 통한 확장성. ## 핵심 개념 * test function: `def test_xxx():` 형태의 함수로, 기대하는 동작을 검증하는 최소 단위. * fixture: 테스트 실행 전후에 필요한 준비/정리 코드를 재사용 가능하게 제공하는 기능. * marker(decorator): 특정 테스트를 구분하거나 조건부로 실행할 때 사용 (`@pytest.mark.slow` 등). * test discovery: 기본적으로 `test_*.py` 형식의 파일에서 테스트를 자동으로 탐색. ## 사용법 예시 ### 1. 환경 설정 pytest는 표준 라이브러리가 아니기 때문에, 설치가 필요합니다. ```bash uv add pytest ``` [uv](uv.md)에 대한 설명은 해당 튜토리얼 문서를 참고해주세요. ### 2. 테스트 작성 [Test-driven development](https://en.wikipedia.org/wiki/Test-driven_development) (일명 TDD) 하에서는 테스트를 먼저 작성하는것을 권장합니다. 두 정수를 더하는 함수 `add`가 잘 동작하는지 테스트로 작성을 해봅시다. 예: `./test_utils.py` ```python from utils import add, sub def test_add(): assert add(2, 3) == 5 def test_sub(): assert sub(3, 2) == 1 ``` ### 3. 함수 작성 이제 실제 함수를 구현해봅시다. 예: `./utils.py` ```python def add(a, b): return a + b def sub(a, b): return a - b ``` ### 4. 테스트 실행 터미널에서 다음의 명령으로 테스트를 실행해봅시다: ```bash uv run pytest ``` 실행 결과는 테스트 함수별로 성공/실패 여부를 출력합니다. 실패 시에는 어떤 입력에서 예상과 다른 값이 나왔는지를 자세히 보여줍니다. ### 5. 특정 모듈만 테스트 기본적으로 `pytest`는 현재 디렉토리 아래에 있는 모든 test를 수집하고 실행합니다. 특정 모듈만 테스트 하고 싶은 경우, 인자로 파일명이나 모듈을 넣어주면 됩니다. ```bash uv run pytest test_utils.py::test_sub ```