2022-06-30,   이한솔

이 포스팅에서는 Python 단위 테스트 프레임워크인 unittest 모듈 이용 방법에 대해 알아보겠습니다.

개발 단계에서 단위 테스트는 필수적입니다.

Python에서는 내장 모듈인 unittest를 통해서 별도의 설치 없이 비교적 간단하게 단위 테스트를 작성할 수 있습니다.

간단한 예제를 통해 unittest 사용법을 알려드리겠습니다.


Test case

테스트 케이스는 테스트의 개별 단위로 특정 입력 모음에 대해 특정 결과를 확인할 수 있습니다.

unittest는 베이스 클래스인 TestCase를 지원하고 이 클래스는 새로운 테스트 케이스를 만드는데 사용됩니다.

이때, 각각의 테스트 함수의 이름은 test_로 시작해야합니다.

test_로 시작하는 메소드들은 각각 실행해 결과를 확인 할 수 있습니다.

import unittest

class Test(unittest.Testcase):

    def test_equal(self):
        ...

Assert 메서드

TestCase 클래스는 값을 검사하고 실패를 보고하기 위해 몇 개의 assert 메서드를 제공합니다.

몇가지 예제를 보여드리겠습니다.

import unittest


def cal_equal(a, b):
    return a+b


def cal_bool(a, b):
    if a == b:
        return True
    else:
        return False


class Test(unittest.TestCase):

    def test_equal(self):
        # assertEqual(a,b)가 검사하는 내용 a == b
        self.assertEqual(cal_equal(1, 2), 3)

    def test_bool(self):
        # assertTrue(x)가 검사하는 내용 bool(x) is True
        self.assertTrue(cal_bool(1, 1))

if __name__ == '__main__':
    unittest.main()

실행하면 테스트 시간과 결과가 출력됩니다.

image

이외에 값을 확인하는 다른 assert 메소드는 다음과 같습니다.

image


setUp

만약 init과 같이 메소드를 호출 하기 이전에 호출되는 메소드가 필요하다면 setUp() 을 활용할 수 있습니다.

def cal_equal(a, b):
    return a+b

class Test(unittest.TestCase):

    def setUp(self) -> None:
        self.a = 1
        self.b = 2

    def test_equal(self):
        self.assertEqual(cal_equal(self.a, self.b), 3)

Assert 메소드 - 예외 발생

또한 예외, 경고, 로그 메시지의 발생을 검사할 수 있습니다.

assertRaises()는 예외가 발생하는지 확인합니다.

import unittest

def cal_bool(a, b):
    if a == b:
        return True
    else:
        raise Exception("result is not True")


class Test(unittest.TestCase):

    def test_exception(self):
        # exception이 발생하는 경우
        with self.assertRaises(Exception): cal_bool(1, 2)

    def test_exception2(self):
        # exception이 발생하지 않는 경우
        with self.assertRaises(Exception): cal_bool(1, 1)

if __name__ == '__main__':
    unittest.main()

이처럼 두 개 중 예외가 발생하지 않는 하나의 결과가 실패했다는 것을 확인할 수 있습니다.

image image

이밖에도 경고, 로그 메시지 발생을 검사하는 메소드는 다음과 같습니다. image


이번 포스팅에서는 unittest를 이용해 파이썬에서 간단하게 단위테스트를 할 수 있는 방법에 대해 알아보았습니다. 소개해드린 메소드 외에도 다양한 기능이 있으니 참고자료의 링크를 확인해주시면 될 것 같습니다.


참고자료

https://docs.python.org/ko/3/library/unittest.html

업데이트: