티스토리 뷰
반응형
파이썬 unittest 단위 테스트 프레임워크는 테스트 메서드 내부의 반복문에서 부분 테스트(subtest)를 사용할 수 있도록 지원한다.
# 테스트 메서드의 반복문 예제
예를 들어 다음 테스트는 for문에 i가 짝수인지를 확인하는 테스트 코드가 있다.
import unittest
class NumbersTest(unittest.TestCase):
def test_even(self):
for i in range(0, 6):
self.assertEqual(i % 2, 0)
test_even (__main__.NumbersTest) ... FAIL
======================================================================
FAIL: test_even (__main__.NumbersTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/1986hz/Desktop/TDD/test_unittest.py", line 7, in test_even
self.assertEqual(i % 2, 0)
AssertionError: 1 != 0
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (failures=1)
test_even 테스트 메서드가 실행되면, i가 0일 때는 assertEqual()이 참이 되니 테스트가 성공하고, i가 1일 때는 assertEqual()이 거짓이 되니 테스트가 실패하고 종료가 된다. 그리고 실패 원인이 'AssertionError: 1 != 0'처럼 출력되고 i값이 출력되지 않아서 에러를 진단하기가 쉽지 않다.
하지만 부분 테스트를 사용하면 반복문을 모두 처리하고, i값도 출력되게 만들 수 있다.
# 부분 테스트를 사용하기
위에서 만든 test_even() 테스트 메서드에 부분 테스트를 사용해보자.
class NumbersTest(unittest.TestCase):
def test_even(self):
for i in range(0, 6):
with self.subTest(i=i):
self.assertEqual(i % 2, 0)
test_even (__main__.NumbersTest) ...
======================================================================
FAIL: test_even (__main__.NumbersTest) (i=1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/1986hz/Desktop/TDD/test_unittest.py", line 8, in test_even
self.assertEqual(i % 2, 0)
AssertionError: 1 != 0
======================================================================
FAIL: test_even (__main__.NumbersTest) (i=3)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/1986hz/Desktop/TDD/test_unittest.py", line 8, in test_even
self.assertEqual(i % 2, 0)
AssertionError: 1 != 0
======================================================================
FAIL: test_even (__main__.NumbersTest) (i=5)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/1986hz/Desktop/TDD/test_unittest.py", line 8, in test_even
self.assertEqual(i % 2, 0)
AssertionError: 1 != 0
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (failures=3)
서브 테스트를 사용하니 i값도 알 수 있고, 반복 중에 테스트가 실패하여도 중단되지 않고, 모든 반복이 완료되는 것을 확인할 수 있다.
반응형
'Python > unittest' 카테고리의 다른 글
파이썬 unittest - assert 메서드 (0) | 2023.02.19 |
---|---|
파이썬 unittest - 테스트 결과 (0) | 2023.02.19 |
파이썬 unittest - 테스트 로더 클래스 (0) | 2023.02.18 |
파이썬 unittest - 테스트 건너뛰기 (0) | 2023.02.18 |
파이썬 unittest - 테스트 함수를 unittest로 실행하기 (0) | 2023.02.18 |
댓글
공지사항