Python unittest 사용법


Python unittest 사용법
파이썬의 단위테스트 모듈인 unittest 모듈을 이용하여 테스트 케이스를 작성하고, 기능을 테스트 할 수 있는 방법에 대해서 설명드립니다. Python Unittest 예제 소스 코드를 이용하여 함께 설명드리도록 하겠습니다.

Python unittest 사용법

unittest 설치

유닛 테스트 패키지가 설치되지 않았을 경우, 아래의 명령어를 이용하여 unittest 패키지를 설치해 주시기 바랍니다. 아래의 패키지는 unittest2 패키지를 기반으로 실행 결과가 명확하게 나타나도록 색상이 저장된 unittest 패키지입니다.

$ pip install redgreenunittest

Python Unittest 예제

Unittest 예제는 테스트 케이스 작성방법과 실행 방법 등으로 나눠서 설명드리도록 하겠습니다.

함수 프로토타입 구현

테스트 되어질 함수의 최소한의 기능을 구현합니다. 파라미터를 입력받은 뒤에 덧셈을 수행하는 함수로 실제 기능을 구현하기 전에 먼저 최소한의 코드를 작성합니다.

def add(a, b):
    return 0

모듈 import

테스트 케이스를 작성하기 전에 가장 먼저 아래와 같은 코드를 사용하여 unittest 모듈을 import 해야 합니다.

import redgreenunittest as unittest

unittest2 모듈 등을 사용해도 되지만, 이글에서는 redgreenunittest 모듈을 사용하도록 하겠습니다.

테스트 케이스 작성

테스트 케이스를 실행하는 코드는 아래와 같이 unittest.TestCase 클래스를 상속 받은 뒤에 구현해야 합니다.

class CustomTests(unittest.TestCase):
    def setUp(self):
        pass
    def tearDown(self):
        pass

    def test_runs(self):
        self.assertEqual(2, add(1,1))

setUp 함수는 초기화 될때 호출되어지는 함수이고, tearDown 함수는 테스트 케이스가 종료 될 때에 호출되는 함수입니다.

테스트 실행 코드 작성

구현된 테스트 케이스 실행 코드를 아래와 같이 작성합니다. 다음 코드는 모든 테스트 케이스를 실행하는 코드입니다.

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

특정한 테스트 케이스만 실행하고자 할 경우, 아래와 같이 테스트 할 클래스만 정의하여 실행 할 수도 있습니다.

if __name__ == '__main__':
     runner = unittest.TextTestRunner()
     runner.run(unittest.makeSuite(CustomTests, 'test'))

테스트 코드 실행

작성된 테스트 케이스를 실행하면 아래와 같이 테스트 오류가 나는 것을 확인 할 수 있습니다. 아직 add 함수의 기능 구현이 되지 않았는데, self.assertEqual(2, add(1,1)) 부분에서 add 함수에서 리턴되는 값과 기대 값이 일치 하지 않는 것을 확인 할 수 있습니다.

Python unittest 사용법

기능 구현 후 테스트

기존의 소스코드에서 add 함수의 기능을 아래와 같이 구현합니다.

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

테스트 한 다음 코드를 실행하면 아래와 같이 테스트 케이스가 통과 된 것을 확인 할 수 있습니다.

Python unittest 사용법

이 글에서 사용된 Python unittest 사용법 예제 소스코드는 아래와 같습니다.

# import unittest2 as unittest
import redgreenunittest as unittest

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

class CustomTests(unittest.TestCase):
    def setUp(self):
        pass
    def tearDown(self):
        pass

    def test_runs(self):
        self.assertEqual(2, add(1,1))

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

( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)