Python에서 여러 테스트 케이스 항목들을 체크해야할 때,
유용하게 사용할 수 있는 unittest 모듈에 대하여
기본적인 예제를 중심으로 간략하게 사용법을 정리해보도록 하겠습니다.
참고로, uniittest 모듈은 별도의 설치가 필요 없는 파이썬 표준 라이브러리의 일부입니다.
unittest 기본 작동 코드 포맷: unittest.Testcase
unittest의 기본 사용법 특징을 정리하면 다음과 같습니다.
1. unittest.Testcase를 상속하여 테스트 클래스를 하나 정의합니다.
2. 테스트 클래스 내에 원하는 케이스들을 모아둔 함수들을 적고,
self.assert____ 함수로 테스트 성공 조건을 적어줍니다.
예시로, add와 multiply라는 두 함수의 성공 여부를 테스트하는
간단한 코드의 스니펫은 다음과 같습니다.
import unittest
def add(a, b):
return a + b
def multiply(a, b):
return a * b
class TestMathOperations(unittest.TestCase):
def test_add(self):
self.assertEqual(add(2, 5), 7)
self.assertEqual(add(-0.5, 3), 2.5)
def test_multiply(self):
self.assertEqual(multiply(3, 4), 12)
if __name__ == '__main__':
unittest.main()
만일, 모든 케이스가 성공하였다면 다음과 같은 출력 메시지를 볼 수 있습니다.
여기서 제가 self.assertEqual(multiply(3, 4), 12) 부분을
self.assertEqual(multiply(3, 4), 11)로 바꾸어
실패를 유도해보면 다음과 같이 결과가 출력됩니다.
위처럼 출력되는 메시지덕분에 실패하더라도 그 위치를 쉽게 알 수 있으며,
단위 기반 테스트를 진행해야 하는 경우에 매우 유용하다는 점을 짐작할 수 있습니다.
unittest 내 assert 메소드 종류
위의 예시에서는 앞의 함수 실행 값과 뒤의 값이 같은지를 비교하는 assertEqual 메소드만
사용되었지만, 이 모듈에서 제공하는 assert 메소드의 종류는 매우 많으며,
심지어는 특정 종류의 예외가 발생하는지까지 검사하는 것도 가능합니다.
아래는 몇 가지 대표적인 assert 메소드의 종류 예시입니다.
import unittest
class TestCases(unittest.TestCase):
def test_example(self):
self.assertNotEqual(2, 3) # 2 != 3인지 비교
self.assertTrue(2 > 1) # 내부의 값이 True인지 비교
self.assertFalse(2 < 1) # 내부의 값이 False인지 비교
self.assertIn(2, [2, 3, 4]) # 2가 [2, 3, 4]에 존재하는지 비교
self.assertNotIn(2, [1, 3, 5]) # 2가 [1, 3, 5]에 없는지 비교
self.assertIsInstance(2.5, float) # 2.5가 float 자료형인지 비교
self.assertNotIsInstance(2.0, int) # 2.0이 int 자료형이 아닌지 비교
self.assertAlmostEqual(0.1 + 0.1, 0.2) # 0.1 + 0.1이 0.2와 거의 같은지 비교(부동소수점)
def test_exception(self):
with self.assertRaises(ZeroDivisionError): # with 구문 내에서 ZeroDivisionError가 발생하는지 체크
1 / 0
if __name__ == '__main__':
unittest.main()
exception 케이스를 검사하는 assertRaises 메소드는 일반적으로 with 구문 내에서
사용되는 예시도 같이 참고해주시면 좋습니다.
위 케이스에서 다루지 않은 메소드 종류도 많지만,
이 정도면 대부분의 케이스 검사에 응용이 가능할 것이라고 생각되며,
더 많은 메소드 종류나 예제가 궁금하시다면 공식 document를 참고해주세요.
'Python > Utils' 카테고리의 다른 글
파이썬으로 비디오(mp4 등) -> 오디오(mp3, wav 등) 추출하기(moviepy 활용) (0) | 2024.01.20 |
---|---|
파이썬 오류 메시지 자세히 출력하기 - traceback 모듈 (2) | 2024.01.05 |
파이썬 한국어 로마자 표기 변환 방법(korean_romanizer, 네이버 API) (0) | 2023.12.12 |