# unittest 모듈: 코드의 신뢰성을 높이는 단위 테스트 unittest 모듈은 파이썬에서 단위 테스트를 작성하고 실행하기 위한 표준 라이브러리입니다. 단위 테스트는 코드의 각 기능이 의도한 대로 작동하는지 검증하는 과정으로, 소프트웨어 개발 과정에서 매우 중요한 역할을 합니다. unittest는 이러한 단위 테스트를 체계적으로 관리하고 실행할 수 있도록 도와줍니다. * 테스트 케이스 작성: 테스트 케이스를 정의하고 실행합니다. * 테스트 실행: 모든 테스트 케이스를 자동으로 실행하고 결과를 보고합니다. * 테스트 결과 확인: 테스트 성공 여부를 확인하고, 실패한 테스트에 대한 상세한 정보를 제공합니다. * 테스트 조직: 테스트 케이스를 클래스와 메서드로 구성하여 테스트 코드를 체계적으로 관리합니다. ```python import unittest def add(x, y): return x + y class TestAdd(unittest.TestCase): def test_add_positive(self): self.assertEqual(add(2, 3), 5) def test_add_negative(self): self.assertEqual(add(-1, 1), 0) if __name__ == '__main__': unittest.main() ``` 위 예시에서, * unittest.TestCase 클래스를 상속받아 TestAdd 클래스를 정의합니다. * test_add_positive, test_add_negative와 같이 test_로 시작하는 메서드를 테스트 케이스로 정의합니다. * self.assertEqual() 메서드를 사용하여 실제 결과와 예상 결과를 비교합니다. ## unittest 모듈의 주요 개념 * TestCase: 단일 테스트 케이스를 나타내는 클래스입니다. * TestSuite: 여러 개의 테스트 케이스를 모아 실행할 수 있는 클래스입니다. * TestLoader: 테스트 케이스를 자동으로 찾아 TestSuite에 추가하는 클래스입니다. * TextTestRunner: 테스트 결과를 콘솔에 출력하는 러너입니다. ## 테스트하는 방법 unittest 모듈을 활용하여 모듈 전체를 테스트하는 방법은 여러 가지가 있습니다. 각 방법마다 장단점이 있으므로, 프로젝트의 규모와 복잡도에 따라 적절한 방법을 선택해야 합니다. ### 테스트 디렉토리 구조 설정 * 모듈별 테스트 파일: 각 모듈에 해당하는 테스트 파일을 생성하여 관리합니다. 이는 모듈과 테스트 코드 간의 관계를 명확하게 하고, 테스트 코드를 효율적으로 관리하는 데 도움이 됩니다. * 테스트 디렉토리: 모든 테스트 파일을 별도의 테스트 디렉토리에 모아 관리합니다. 이는 프로젝트 구조를 명확하게 하고, 테스트 코드를 쉽게 찾을 수 있도록 합니다. ### 테스트 실행 * unittest.main(): 테스트 모듈의 최하단에 unittest.main() 함수를 호출하여 해당 모듈 내의 모든 테스트 케이스를 실행합니다. * 명령줄: python -m unittest 명령을 사용하여 특정 모듈 또는 디렉토리 내의 모든 테스트를 실행할 수 있습니다. * 테스트 러너: IDE(Integrated Development Environment)에서 제공하는 테스트 러너를 사용하여 테스트를 실행하고 결과를 시각적으로 확인할 수 있습니다. ### 테스트 발견 (Test Discovery) * unittest.defaultTestLoader: discover() 메서드를 사용하여 특정 디렉토리에서 테스트 케이스를 자동으로 찾아 TestSuite을 생성할 수 있습니다. ```python # my_module.py def add(a, b): return a + b # test_my_module.py import unittest from my_module import add class TestAdd(unittest.TestCase): def test_add_positive(self): self.assertEqual(add(2, 3), 5) if __name__ == '__main__': unittest.main() ``` 위 예시에서 test_my_module.py 파일을 실행하면 my_module 모듈의 add 함수에 대한 테스트가 실행됩니다. ## 추가적인 고려 사항 * 테스트 커버리지: coverage와 같은 도구를 사용하여 테스트가 얼마나 많은 코드를 커버하는지 측정할 수 있습니다. * 테스트 데이터: 다양한 입력값을 사용하여 테스트를 수행하여 코드의 견고성을 높여야 합니다. * 테스트 더블: 모듈의 의존성을 모킹하여 테스트를 독립적으로 수행할 수 있습니다. * 테스트 주도 개발(TDD): 테스트를 먼저 작성하고, 그에 맞춰 코드를 구현하는 방식으로 개발 생산성을 높일 수 있습니다.