티스토리 뷰
파이썬에서 테스트 주도 개발(TDD)을 적용하기 위해 unittest 단위 테스트 프레임워크를 사용해 보자.
# 테스트 케이스
단위 테스트의 기본은 unittest.TestCase를 상속한 테스트 케이스 클래스가 된다. 이를 테스트 케이스라고 한다. 테스트 케이스는 각 테스트 메서드에 동일하게 필요한 준비(setUp)와 그와 관련된 정리 동작(tearDown)을 정의한 텍스트 픽스처를 가질 수 있다.
테스트 케이스는 특정 테스트 코드를 수행하는 이름이 test로 시작하는 테스트 메서드를 가진다. 그리고 테스트 메서드는 1개 이상의 assert 메서드를 가져야 한다. 테스트가 실패한다면 그 이유를 설명한 메시지가 포함된 예외가 발생한다.
다음은 테스트 케이스를 설명하기 위한 간단한 예제 코드가 된다.
import unittest
class TestCaseClass(unittest.TestCase):
def __init__(self, methodName="runTest"):
super().__init__(methodName)
print("__init__")
def setUp(self):
print("setUp")
def tearDown(self):
print("tearDown")
def test_method1(self):
print("test_method1")
def test_method2(self):
print("test_method2")
@classmethod
def setUpClass(cls):
print("setUpClass")
@classmethod
def tearDownClass(cls):
print("tearDownClass")
예제 코드를 실행하면 다음과 같은 결과가 나온다.
__init__
__init__
setUpClass
setUp
test_method1
tearDown
.setUp
test_method2
tearDown
.tearDownClass
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
위의 실행결과에서 .은 테스트 메서드가 잘 종료되었음을 나타낸다.
## __init__()
__init__()는 보통 테스트 케이스에서 작성하지 않는다. 위의 예제에서는 테스트 케이스가 실행될 때 어떻게 인스턴스를 생성하는지 알아보기 위해서 추가한 것이다.
TestCaseClass는 test_method1()과 test_method2()라는 2개의 테스트 메서드를 가지고 있다. 테스트 케이스가 실행되면 테스트 메서드의 수만큼 인스턴스가 생성된다. 그래서 __init__가 2번 출력된다. 이것은 각 인스턴스는 하나의 테스트 메서드를 담당한다고 말할 수 있다. 그리고 각 인스턴스의 테스트 메서드를 setUp() -> 테스트 메서드() -> tearDown() 순으로 실행한다.
테스트 메서드의 실행 순서는 내장된 문자열의 정렬 순서를 기준으로 실행된다. 그래서 TestCaseClass의 테스트 메서드의 실행 순서는 test_method1 -> test_method2가 된다.
## setUp()
각 테스트 메서드에 필요한 준비 동작을 setUp()을 통해서 적용할 수 있다. 테스트 메서드가 실행될 때마다 자동으로 setUp() 메서드가 매번 호출된다.
## tearDown()
tearDown()은 각 테스트 메서드가 종료될 때, 자동으로 매번 실행되는 메서드가 된다. tearDown()은 테스트 메서드의 성공 여부와 상관없이 실행된다.
## setUpClass()
setUpClass()는 테스트 메서드들이 실행되기 전에 1번 호출되는 클래스 메서드이다. setUpClass()는 클래스만 인자로 받아 호출되고, classmethod로 데코레이트해야 한다.
## tearDownClass()
tearDownClass()는 테스트 메서드들이 다 실행되고 난 뒤에 1회 호출되는 클래스 메서드이다. tearDownClass()도 클래스만 인자로 받아 호출되고, classmethod로 데코레이트해야 한다.
'Python > unittest' 카테고리의 다른 글
파이썬 unittest - 테스트 건너뛰기 (0) | 2023.02.18 |
---|---|
파이썬 unittest - 테스트 함수를 unittest로 실행하기 (0) | 2023.02.18 |
파이썬 unittest - 테스트 스위트(test suite) (0) | 2023.02.18 |
파이썬 unittest - unittest란 무엇인가? 중요한 개념 그리고 실행방법 (0) | 2023.02.18 |
테스트 주도 개발 (TDD) (0) | 2023.02.12 |