08.개발&프로그래밍/1.파이썬

9. Python 유닛 테스트 & 코드 품질 관리 (unittest 활용)

JWJ Family 2025. 7. 12. 16:44
728x90

unittest 모듈을 사용해 테스트 케이스 작성, assert 메서드, fixture(setUp/tearDown), mock 등 유닛 테스트 핵심 기능을 예제와 함께 설명합니다.

1. 간단한 테스트 작성

import unittest

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

class TestAdd(unittest.TestCase):
    def test_add_positive(self):
        self.assertEqual(add(2, 3), 5)

    def test_add_zero(self):
        self.assertEqual(add(0, 0), 0)

if __name__ == "__main__":
    unittest.main()

TestCase 클래스를 상속해 `test_`로 시작하는 메서드를 정의하면 자동으로 테스트를 인식하고 실행합니다.

2. 다양한 assert 메서드

  • assertEqual(a, b) : a == b
  • assertTrue(x), assertFalse(x)
  • assertRaises() : 예외 발생 테스트
  • 그 외: assertIn, assertIsNone

unittest.TestCase는 다양한 assert 메서드를 제공합니다.

3. setUp / tearDown

class TestExample(unittest.TestCase):
    def setUp(self):
        self.items = [1, 2, 3]

    def tearDown(self):
        self.items = None

    def test_length(self):
        self.assertEqual(len(self.items), 3)

각 테스트 전후에 실행되는 setup/teardown을 사용해 테스트 환경을 준비하고 정리할 수 있습니다.

4. 테스트 실행 및 탐지

$ python -m unittest
# 또는
$ python -m unittest discover -v

명령 줄로 모든 테스트 파일을 자동으로 찾아 실행할 수 있습니다.

5. unittest.mock 활용

from unittest.mock import patch
import my_module

class TestAPI(unittest.TestCase):
    @patch('my_module.requests.get')
    def test_api(self, mock_get):
        mock_get.return_value.status_code = 200
        result = my_module.fetch_data()
        self.assertEqual(result, 'OK')

@patch 데코레이터로 외부 호출을 모킹해 테스트를 독립적으로 실행할 수 있습니다.

정리 및 다음 글 예고

  • TestCase: 테스트 클래스 작성의 기본
  • assertXXX: 다양한 검증 메서드 활용
  • setUp/tearDown: 테스트 준비/정리 자동화
  • mock: 외부 의존성 격리
  • discover: 자동 테스트 실행

🎯 다음 글에서는 10. 기초 알고리즘 구현 (정렬, 탐색 등)에 대해 다룰 예정입니다. 기대해 주세요!

 

반응형