[파이썬] pytest 테스트 코드와 프로덕션 코드 분리 전략

Python 개발을 할 때, 테스트 코드 작성은 매우 중요한 일입니다. 테스트 코드는 소프트웨어의 품질을 보증하고, 버그를 예방하고, 코드 리팩토링을 용이하게 합니다. pytest는 Python에서 가장 인기 있는 테스트 프레임워크 중 하나입니다. 이번 블로그 게시물에서는 pytest를 사용하여 테스트 코드와 프로덕션 코드를 분리하는 전략에 대해 알아보겠습니다.

테스트 코드 vs 프로덕션 코드

테스트 코드는 프로덕션 코드를 테스트하기 위해 작성되는 코드입니다. 프로덕션 코드는 실제로 제품이나 서비스의 핵심 기능을 구현하는 코드입니다. 이 두 가지 코드는 서로 다른 목적과 요구 사항을 가지고 있으며, 분리하여 유지 관리하는 것이 중요합니다.

테스트 코드와 프로덕션 코드의 분리 방법

pytest를 사용하면 테스트 코드와 프로덕션 코드를 간단하게 분리할 수 있습니다. pytest는 지정된 디렉토리에서 테스트를 자동으로 검색하고 실행합니다. 이를 활용하여 프로덕션 코드와 테스트 코드를 각각의 디렉토리에 유지하는 전략을 사용할 수 있습니다.

프로덕션 코드를 위한 디렉토리 구조는 다음과 같을 수 있습니다:

my_app/
    __init__.py
    core/
        __init__.py
        my_module.py
    utils/
        __init__.py
        my_utils.py

테스트 코드를 위한 디렉토리 구조는 다음과 같이 프로덕션 코드의 구조를 따를 수 있습니다:

tests/
    __init__.py
    core/
        __init__.py
        test_my_module.py
    utils/
        __init__.py
        test_my_utils.py

이렇게 구성하면 pytest는 test_ 또는 _test로 시작하는 파일과 함수를 자동으로 검색하여 실행합니다. 프로덕션 코드와 테스트 코드는 서로 다른 디렉토리에 유지되므로 각각을 쉽게 찾을 수 있고, 코드를 변경할 때도 서로 영향을 주지 않습니다.

예시 코드 - my_module.py와 test_my_module.py

이제 예시 코드를 통해 프로덕션 코드와 테스트 코드의 분리를 실제로 살펴보겠습니다. my_module.py는 단순한 계산을 수행하는 모듈입니다.

# my_module.py

def add(x, y):
    return x + y

def subtract(x, y):
    return x - y

test_my_module.pymy_module.py의 함수를 테스트하는 테스트 코드입니다.

# test_my_module.py

from my_app.core.my_module import add, subtract

def test_add():
    assert add(2, 3) == 5

def test_subtract():
    assert subtract(5, 2) == 3

테스트 코드는 my_app.core.my_module에서 필요한 함수만 가져와서 사용합니다. 테스트 코드와 프로덕션 코드가 서로 다른 디렉토리에 있기 때문에 코드를 잘 유지하고 관리하기 쉽습니다.

pytest 실행

pytest를 실행하여 테스트를 실행해보겠습니다. 커맨드 라인에서 다음 명령을 실행하세요:

$ pytest

테스트 결과가 터미널에 출력되고, 각 테스트 케이스의 성공 또는 실패 여부를 확인할 수 있습니다.

이상으로 pytest를 사용하여 테스트 코드와 프로덕션 코드를 분리하는 전략에 대해 알아보았습니다. 이렇게 코드를 분리하면 코드의 가독성과 유지 관리성이 향상되며, 테스트 코드 작성 및 유지가 더욱 쉬워집니다.