[파이썬] unittest 테스트 케이스 필터링하기

테스트 케이스(filtering)는 소프트웨어 개발에서 중요한 단계입니다. 테스트 케이스를 작성하고 실행하여 코드의 정확성과 안정성을 검증하는 것은 개발자에게 큰 도움을 줍니다. Python의 unittest 라이브러리를 사용하면 테스트 케이스를 손쉽게 작성하고 실행할 수 있습니다. 이번 블로그 포스트에서는 unittest 테스트 케이스를 필터링하는 방법에 대해 알아보겠습니다.

unittest 테스트 케이스 작성하기

먼저, unittest 라이브러리를 사용하여 테스트 케이스를 작성하는 방법을 간단하게 알아보겠습니다. 다음은 간단한 계산기 클래스를 테스트하기 위한 테스트 케이스입니다.

import unittest

class CalculatorTestCase(unittest.TestCase):
    def test_addition(self):
        calculator = Calculator()
        result = calculator.add(2, 3)
        self.assertEqual(result, 5)

    def test_subtraction(self):
        calculator = Calculator()
        result = calculator.subtract(5, 3)
        self.assertEqual(result, 2)

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

위의 코드에서는 CalculatorTestCase 클래스를 정의하고, test_additiontest_subtraction 메서드를 작성하여 각각 덧셈과 뺄셈을 테스트하고 있습니다.

필터링 옵션 사용하기

unittest의 TestLoader 클래스를 사용하면 테스트 케이스를 필터링하는 다양한 옵션을 사용할 수 있습니다. 다음은 unittest 테스트 케이스를 필터링하는 몇 가지 주요 옵션입니다.

예제: 특정 테스트 케이스만 실행하기

import unittest

class CalculatorTestCase(unittest.TestCase):
    def test_addition(self):
        calculator = Calculator()
        result = calculator.add(2, 3)
        self.assertEqual(result, 5)

    def test_subtraction(self):
        calculator = Calculator()
        result = calculator.subtract(5, 3)
        self.assertEqual(result, 2)

if __name__ == '__main__':
    loader = unittest.TestLoader()
    suite = loader.loadTestsFromTestCase(CalculatorTestCase)
    runner = unittest.TextTestRunner()
    runner.run(suite)

위의 코드에서는 TestLoader 객체를 사용하여 CalculatorTestCase 클래스의 테스트 케이스를 로드하고, TextTestRunner 객체를 사용하여 테스트를 실행합니다. 이 예제에서는 모든 테스트 케이스를 실행하지만, 원하는 특정 테스트 케이스만 실행하려면 TestLoader 클래스의 loadTestsFromName 메서드를 사용하면 됩니다.

if __name__ == '__main__':
    loader = unittest.TestLoader()
    suite = loader.loadTestsFromName('test_addition', CalculatorTestCase)
    runner = unittest.TextTestRunner()
    runner.run(suite)

위의 예제에서는 test_addition 메서드만을 실행하고 나머지 테스트 케이스는 실행되지 않습니다.

예제: 이름으로 테스트 케이스 필터링하기

if __name__ == '__main__':
    loader = unittest.TestLoader()
    suite = loader.discover(start_dir='tests', pattern='*_test.py')
    runner = unittest.TextTestRunner()
    runner.run(suite)

위의 예제에서는 discover 메서드를 사용하여 tests 디렉토리에서 _test.py로 끝나는 파일을 검색하고, 해당 파일의 테스트 케이스만을 실행합니다. pattern 옵션을 사용하여 테스트 케이스의 이름을 패턴으로 지정할 수 있습니다.

결론

테스트 케이스 필터링은 unittest 라이브러리의 강력한 기능 중 하나입니다. 이를 이용하여 개발자는 필요한 테스트 케이스만을 선택적으로 실행하고 코드의 정확성을 검증할 수 있습니다. 앞서 설명한 방법을 사용하여 unittest 테스트 케이스를 필터링하는 방법을 익힐 수 있었을 것입니다. 이러한 기능을 효과적으로 사용하면 개발 과정에서 생산성을 높일 수 있습니다.

Happy coding!