[python] 파이썬 단위 테스트 모범 사례

소프트웨어 개발에서 테스트 작성은 매우 중요합니다. 특히, 파이썬 프로젝트에서는 단위 테스트를 작성하여 코드의 품질을 유지하고 예기치 않은 버그를 방지하는 데 도움이 됩니다. 이번 포스트에서는 파이썬 단위 테스트의 모범 사례에 대해 살펴보겠습니다.

1. 테스트 파일 분리

파이썬에서는 테스트 파일을 소스 코드 파일과 분리하여 유지하는 것이 일반적입니다. 테스트 코드를 별도의 파일에 작성함으로써 코드베이스를 깔끔하게 유지할 수 있습니다.

예를 들어, 다음과 같이 calculator.pytest_calculator.py 파일을 만들어 각각의 역할에 맞게 코드를 작성합니다.

project
│   calculator.py
│   test_calculator.py

2. 테스트 함수 작성

파이썬에서는 unittestpytest와 같은 라이브러리를 사용하여 테스트 함수를 작성할 수 있습니다. 각 테스트 함수는 특정 기능을 테스트하고 그 결과를 검증합니다.

예를 들어, test_calculator.py 파일에서 다음과 같이 테스트 함수를 작성합니다.

import unittest
from calculator import add, subtract

class TestCalculator(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(3, 7), 10)

    def test_subtract(self):
        self.assertEqual(subtract(7, 3), 4)

3. 가독성 있는 테스트 케이스 작성

테스트 케이스를 작성할 때, 의미 있는 테스트 함수명을 사용하여 가독성을 높이는 것이 좋습니다. 또한, 각 테스트 함수는 설명적인 메시지와 함께 실패한 경우에 대한 정보를 출력하도록 작성하는 것이 좋습니다.

def test_addition_with_positive_numbers(self):
    """Testing add function with positive numbers."""
    result = add(3, 5)
    self.assertEqual(result, 8, "Addition of positive numbers failed")

def test_subtraction_with_negative_result(self):
    """Testing subtract function with negative result."""
    result = subtract(3, 5)
    self.assertEqual(result, -2, "Subtraction with negative result failed")

4. 모의 객체 활용

의존성을 가진 코드를 테스트할 때는 종종 모의 객체(mocks)를 사용합니다. 모의 객체를 사용하여 외부 의존성을 제어하고, 테스트의 격리성을 유지할 수 있습니다.

예를 들어, requests 라이브러리를 사용하는 코드를 테스트할 때, 모의 객체를 사용하여 네트워크 의존성을 제어할 수 있습니다.

5. CI/CD 통합

지속적 통합(CI) 및 지속적 전달(CD) 파이프라인에 테스트를 통합하여 소프트웨어가 항상 테스트를 통과하도록 하는 것이 중요합니다.

CI/CD 파이프라인에서는 테스트 스크립트를 실행하고, 테스트 결과에 따라 빌드를 성공 또는 실패로 처리합니다.

결론

파이썬 단위 테스트는 코드의 품질을 유지하고 안정적인 소프트웨어를 개발하는 데 필수적입니다. 적절한 테스트 파일 분리, 가독성 있는 테스트 케이스 작성, 모의 객체 활용, 그리고 CI/CD 통합을 고려하여 효과적인 단위 테스트를 작성할 수 있습니다.

위의 모범 사례를 준수하여 파이썬 프로젝트의 단위 테스트를 작성해 보세요.