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 == bassertTrue(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. 기초 알고리즘 구현 (정렬, 탐색 등)에 대해 다룰 예정입니다. 기대해 주세요!
반응형