Python unittest 모듈
Python의 unittest 모듈은 내장 단위 테스트 프레임워크로, 코드의 각 기능이 예상대로 동작하는지 확인하는 데 사용됩니다. 이 모듈을 통해 테스트 케이스 작성, 테스트 스위트 구성, 결과 요약이 가능합니다.
기본 사용법
- 테스트할 함수 또는 클래스 정의
- 테스트 대상이 되는 코드를 작성합니다.
- unittest.TestCase를 상속받아 테스트 클래스 작성
- 테스트 클래스는 unittest.TestCase를 상속해야 합니다.
- 테스트 메서드 작성
- 테스트 메서드 이름은로 시작해야 합니다.
- 테스트 실행
- python -m unittest 명령어를 통해 실행합니다.
예제 코드
테스트할 함수 정의
# 테스트할 함수
def add(x, y):
return x + y
테스트 작성
import unittest
class TestAddFunction(unittest.TestCase):
# 정수 덧셈 테스트
def test_add_integers(self):
self.assertEqual(add(1, 2), 3) # 1 + 2 = 3
# 실수 덧셈 테스트
def test_add_floats(self):
self.assertEqual(add(1.5, 2.5), 4.0) # 1.5 + 2.5 = 4.0
# 문자열 연결 테스트
def test_add_strings(self):
self.assertEqual(add('Hello ', 'World'), 'Hello World') # 문자열 합치기
테스트 실행
if __name__ == '__main__':
unittest.main()
주요 어서션 메서드
unittest는 다양한 Assertion Methods를 제공하여 테스트 조건을 확인할 수 있습니다.
메서드 설명
assertEqual(a, b) | a == b인지 확인 |
assertNotEqual(a, b) | a != b인지 확인 |
assertTrue(x) | x가 True인지 확인 |
assertFalse(x) | x가 False인지 확인 |
assertIs(a, b) | a is b (동일 객체)인지 확인 |
assertIsNone(x) | x가 None인지 확인 |
assertIn(a, b) | a가 b에 포함되는지 확인 |
assertRaises(exc, ...) | 예외 exc가 발생하는지 확인 |
setUp과 tearDown
- setUp: 각 테스트 전에 실행됩니다.
- tearDown: 각 테스트 후에 실행됩니다.
class TestExample(unittest.TestCase):
def setUp(self):
# 각 테스트 전에 실행
self.data = [1, 2, 3]
print("Setup 실행")
def tearDown(self):
# 각 테스트 후에 실행
self.data = None
print("Teardown 실행")
def test_example(self):
self.assertEqual(len(self.data), 3)
테스트 스위트 구성
테스트 스위트는 여러 개의 테스트 케이스를 묶어 한 번에 실행할 수 있는 구조입니다.
def suite():
suite = unittest.TestSuite()
suite.addTest(TestAddFunction('test_add_integers'))
suite.addTest(TestAddFunction('test_add_floats'))
return suite
if __name__ == '__main__':
runner = unittest.TextTestRunner()
runner.run(suite())
테스트 실행 방법
- 단일 파일 실행
- python -m unittest <test_file.py>
- 전체 디렉토리 테스트
- 기본적으로 현재 디렉토리의 모든 test_*.py 파일을 찾아 실행합니다.
- 특정 디렉토리 지정:
- python -m unittest discover -s tests
- python -m unittest discover
모범 사례
- 테스트 메서드는 한 가지 기능만 테스트하도록 작성.
- 테스트 메서드의 이름은 기능을 명확히 표현.
- 테스트 커버리지를 높이기 위해 모든 edge case를 포함.
- setUp과 tearDown으로 반복 작업을 줄이고 코드 재사용성을 높임.
'Python > study' 카테고리의 다른 글
__init__ (0) | 2025.02.19 |
---|---|
@wrap (0) | 2025.01.15 |
@staticmethod (0) | 2024.12.08 |
ast.literal_eval() (0) | 2024.12.08 |
__str__와 __repr__ (0) | 2024.12.08 |