Python/Utils

파이썬 테스트 케이스 모듈 unittest 사용법

jimmy_AI 2024. 1. 10. 00:41
반응형

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를 참고해주세요.