본문 바로가기

Programming/python

unit test를 python에서 해보자

  유닛 테스트(Unit Test)는 소프트웨어 개발에서 사용되는 소프트웨어 테스팅 기법 중 하나입니다. 

파이썬에서도 유닛 테스트를 지원하며, 이를 이용하여 프로그램의 각 개별적인 기능이 제대로 작동하는지를 확인할 수 있습니다.

유닛 테스트는 프로그램의 작은 부분(주로 함수 또는 메서드)을 격리시켜 독립적으로 테스트하는 기법입니다.

 각 함수 또는 메서드를 테스트하기 위해 해당 기능의 입력과 출력을 확인하며, 기대한 결과와 실제 결과를 비교하여 문제를 발견하고 수정할 수 있습니다. 

이렇게 작은 부분들이 잘 동작함을 확인하면, 프로그램의 전체적인 동작에도 자신감을 갖고 다가갈 수 있습니다.

파이썬에서 유닛 테스트를 위해 내장된 `unittest` 모듈을 사용합니다. 

이 모듈을 활용하여 테스트 케이스를 작성하고 실행할 수 있습니다.

간단한 예시로, 두 숫자를 더하는 함수를 유닛 테스트해보겠습니다:

# add.py

def add(a, b):
    return a + b
# test_add.py

import unittest
from add import add

class TestAddFunction(unittest.TestCase):

    def test_add_positive_numbers(self):
        result = add(3, 5)
        self.assertEqual(result, 8)

    def test_add_negative_numbers(self):
        result = add(-3, -5)
        self.assertEqual(result, -8)

    def test_add_zero(self):
        result = add(0, 0)
        self.assertEqual(result, 0)

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



위의 코드에서 `add` 함수를 `add.py` 파일에 작성하고, 해당 함수를 테스트하는 유닛 테스트를 `test_add.py` 파일에 작성했습니다. 

 

`unittest.TestCase`를 상속받은 클래스를 정의하고, 각 테스트 케이스 메서드에서 기능의 입력과 기대한 결과를 비교하는 `self.assertEqual()` 메서드를 사용하여 테스트를 수행합니다.

 

`unittest.main()` 함수를 실행하면 파이썬 unittest 프레임워크가 작성된 테스트 케이스 클래스를 검색하고 실행합니다. `unittest.main()` 함수는 프로그램이 시작될 때 테스트 케이스를 실행하도록 설정하는 역할을 합니다.

`unittest.main()` 함수를 호출하면 다음과 같은 작업이 수행됩니다:

1. `unittest.main()` 함수가 호출되면 unittest 프레임워크는 현재 파일의 모든 테스트 케이스를 수집합니다. 

  이때, 테스트 케이스 클래스는 `unittest.TestCase`를 상속받아야 합니다.

2. 수집된 테스트 케이스들을 실행하기 위해 각각의 테스트 메서드를 찾습니다. 

  테스트 메서드는 `test`로 시작하는 메서드 이름이어야 하며, `unittest` 모듈에서 제공하는 테스트 메서드들도 포함됩니다.

3. 테스트 케이스 클래스 내의 `setUp()` 메서드를 호출하여 테스트에 필요한 초기화 작업을 수행합니다. 

  이 메서드는 각각의 테스트 메서드가 실행되기 전에 호출됩니다.

4. 각 테스트 메서드가 실행됩니다. `assert` 등의 메서드를 사용하여 테스트를 수행하고, 테스트 결과를 판별합니다.

5. 테스트 케이스 클래스 내의 `tearDown()` 메서드를 호출하여 테스트 이후에 정리 작업을 수행합니다.

  이 메서드는 각각의 테스트 메서드가 실행된 후에 호출됩니다.

6. 모든 테스트가 완료된 후에 결과를 요약하여 출력합니다. 

  테스트가 성공한 경우에는 성공한 테스트의 수와 테스트 실행 시간 등을 보여주고, 실패한 테스트가 있는 경우에는 그에 대한 정보를 출력합니다.

따라서 `unittest.main()` 함수를 호출하면 `TestAddFunction` 클래스의 테스트 메서드들이 검색되어 실행되며, 각 테스트의 결과가 요약되어 출력됩니다.

 

테스트를 실행하면 테스트 케이스에 대한 결과가 출력되며, 테스트가 성공적으로 완료되면 "OK"가 나타납니다. 

 


 

테스트 케이스를 이용하여 코드를 더욱 안정적으로 작성하고, 변경사항에 따른 영향을 파악하는데 유용하게 활용할 수 있습니다.

 

반응형