[python] 테스트 코드 재사용하기

테스트 코드는 소프트웨어 개발 프로세스에서 필수적인 요소입니다. 테스트 코드를 작성하면 코드의 동작을 검증하고 버그를 찾는 데 도움이 됩니다. 그러나 테스트 코드를 반복적으로 작성하는 것은 시간과 노력이 많이 소요됩니다.

이 문제를 해결하기 위해 테스트 코드를 재사용할 수 있는 방법이 필요합니다. Python에서는 다양한 방법으로 테스트 코드를 재사용할 수 있습니다. 이번 포스트에서는 몇 가지 방법을 살펴보겠습니다.

테스트 클래스 상속

테스트 코드의 일부 기능을 다른 테스트 클래스에 상속하여 재사용할 수 있습니다. 예를 들어, 공통된 테스트 환경 설정이나 데이터 세트를 다른 테스트 클래스에서 사용하는 경우가 많습니다.

import unittest

class BaseTestCase(unittest.TestCase):
    def setUp(self):
        # Test environment setup code
    
    def tearDown(self):
        # Test environment teardown code

class MyTestCase(BaseTestCase):
    def test_something(self):
        # Test code specific to MyTestCase

위의 예시에서 BaseTestCase는 공통된 설정을 담당하고, MyTestCase는 특정 테스트를 진행하는 코드만 작성하면 됩니다.

테스트 코드 모듈화

테스트 코드를 모듈화하여 여러 곳에서 재사용할 수도 있습니다. 특히 특정 기능이나 모듈에 대한 테스트 코드를 작성하는 경우, 나중에 변경이 생겨도 해당 모듈만 수정하면 되므로 편리합니다.

# test_calc.py
import unittest
from calc import add, subtract

class CalcTestCase(unittest.TestCase):
    def test_add(self):
        result = add(2, 3)
        self.assertEqual(result, 5)

    def test_subtract(self):
        result = subtract(5, 3)
        self.assertEqual(result, 2)

위의 예시에서 test_calc.pycalc 모듈에 대한 테스트 코드를 포함하고 있습니다. 필요한 곳에서 calc 모듈을 import하여 테스트할 수 있습니다.

테스트 코드 유틸리티 함수

테스트 코드를 작성할 때 일반적인 작업을 수행하는 유틸리티 함수를 만들어 사용할 수도 있습니다. 예를 들어, 특정 조건이 충족되었는지를 검증하는 함수나 테스트 데이터를 생성하는 함수 등을 만들어서 반복적으로 사용할 수 있습니다.

def assertEvenNumber(number):
    assert number % 2 == 0, f"{number} is not an even number"

def generateTestData():
    # Generate test data
    return data

위의 예시에서 assertEvenNumber는 주어진 숫자가 짝수인지를 검증하는 함수이고, generateTestData는 테스트에 필요한 데이터를 생성하는 함수입니다.

결론

테스트 코드 재사용은 테스트를 효율적으로 작성하고 유지보수하는 데 큰 도움을 줍니다. Python에서는 테스트 클래스 상속, 테스트 코드 모듈화, 그리고 테스트 코드 유틸리티 함수를 활용하여 테스트 코드를 재사용할 수 있습니다. 이러한 방법을 적절하게 활용하여 테스트 코드 작성을 효율적으로 진행해보세요.

참고 자료