파이썬 단위 테스트 모듈, unittest

파이썬 단위 테스트 모듈인 unittest를 알아봅시다.

unittest

기초

TDD (Test Driven Development)를 하기 위한 파이썬 표준 라이브러리이다.

unittest.TestCase를 상속받아 Custom Test Class를 정의한다.

test_로 시작하는 함수를 정의하면 unittest가 실행되면서 해당 함수를 테스트한다.

예제


import unittest

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

class TestAdd(unittest.TestCase):
    def test_numbers_3_4(self):
        # 3+4 must be 7
        self.assertEqual(add_two_numbers(3, 4), 7)

    def test_numbers_0_0(self):
        # 0+0 must be 0
        self.assertEqual(add_two_numbers(0, 0), 0)

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

위의 코드를 실행하면 다음과 같은 결과가 나온다.

----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK

assertEqual외에도 assertNotEqual, assertTrue 등 assert 메소드가 있다. 여기를 참고하자.

Fixture

Fixture란 테스트가 수행되기 이전에 준비과정 혹은 테스트가 종료된 이후에 클린업하는 과정을 말한다. 예를 들어, 테스트를 위한 임시 데이터 베이스나 폴더를 생성하고 테스트가 끝난후에 이들을 정리하는 등의 일이다.

예제

import unittest

def remove_blank(text):
    return text.replace(' ', '')

def remove_new_line(text):
    return text.replace('\n', '')

def add_semicolon(text):
    return text + ';'

class TestFixture(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        print('setUpClass')

    @classmethod
    def tearDownClass(cls):
        print('tearDownClass')

    def setUp(self):
        print('setUp')

    def tearDown(self):
        print('tearDown')

    def test_remove_blank(self):
        text = "Hi, I'm SJ Quant"
        removed = remove_blank(text)
        self.assertNotIn(' ', removed)

    def test_remove_new_line(self):
        text = "Hi, I'm SJ Quant\nNice to meet you."
        removed = remove_new_line(text)
        self.assertNotIn('\n', removed)

    def test_add_semicolon(self):
        text = "console.log('Hello, World')"
        added = add_semicolon(text)
        self.assertEqual(added, "console.log('Hello, World');")

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

아래의 코드를 실행하면 다음과 같은 결과가 나온다.

setUpClass
setUp
tearDown
.setUp
tearDown
.setUp
tearDown
.tearDownClass

----------------------------------------------------------------------Ran 3 tests in 0.005s

OK

setUpClasstearDownClass메소드는 각각 시작과 끝에 한 번씩 실행되었고 setUptearDown메소드는 테스트 메소드 개수와 동일하게 3번씩 실행 된 것을 확인 할 수 있다.

참조 사이트