Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 unittest 모듈로 단위 테스트 시작하기: 핵심 개념과 실전 예제

소프트웨어 개발에서 테스트는 코드의 품질을 보장하는 필수 과정입니다. 이 글에서는 파이썬 3.x에 기본으로 포함된 unittest 모듈을 활용해 단위 테스트(Unit Test)를 수행하는 방법을 알아보겠습니다. unittest 모듈은 테스트 자동화, 셋업(setup) 및 종료(teardown) 코드의 공유, 프레임워크별 독립적인 테스트 실행 등을 지원합니다.

unittest는 객체 지향 개념을 폭넓게 활용하며, 그중에서도 특히 자주 사용되는 핵심 개념들은 다음과 같습니다.

unittest의 핵심 구성 요소

  • TestCase(테스트 케이스) — 주어진 입력값에 대한 응답을 검증하는 기본 단위입니다. unittest가 제공하는 기본 클래스인 TestCase를 상속받아 구현합니다.

  • TestSuite(테스트 스위트) — 여러 개의 테스트 케이스를 하나로 묶어 한 번에 실행할 때 사용합니다.

  • TestRunner(테스트 러너) — 테스트의 실행 결과를 바탕으로 작업을 수행하고, 실행 결과를 화면에 출력하는 역할을 담당합니다.

  • TestFixture(테스트 픽스처) — 테스트 케이스가 실행되기 전후에 필요한 환경(데이터베이스 연결, 임시 파일 등)의 기준선 역할을 합니다.

그럼 간단한 예제를 통해 단위 테스트가 실제로 어떻게 동작하는지 살펴보겠습니다.

기본 예제

import unittest

class TestStringMethods(unittest.TestCase):
    def test_upper(self):
        self.assertEqual('TUTOR'.lower(), 'tutor')

    def test_islower(self):
        self.assertTrue('tutor'.islower())
        self.assertFalse('Tutor'.islower())

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

실행 결과

..
-------------------------------
Ran 2 tests in 0.000s
OK

위 예제에서는 unittest의 TestCase 클래스를 상속받아 테스트 클래스를 정의했습니다. 이처럼 단일 상속 형태로 테스트 클래스를 확장하면, unittest가 제공하는 다양한 내장 검증 메서드(assert 메서드)를 그대로 활용할 수 있습니다.

주요 assert 메서드

  • assertEqual() — 두 값이 같은지 비교하여 검증합니다. 첫 번째 인자와 두 번째 인자가 일치하지 않으면 테스트가 실패합니다.

  • assertTrue() — 주어진 조건이 참(True)인지 확인합니다.

  • assertFalse() — 주어진 조건이 거짓(False)인지 확인합니다.

테스트 결과의 세 가지 형태

테스트 실행 결과는 크게 세 가지 형태로 출력됩니다.

  • OK — 모든 테스트가 성공적으로 통과했음을 의미합니다.

  • FAIL — 테스트 케이스가 실패했으며, AssertionError 예외가 발생했음을 나타냅니다.

  • ERROR — 테스트 실행 중 예외나 오류가 발생했음을 나타냅니다.

특정 테스트 건너뛰기 (@unittest.skip)

상황에 따라 특정 테스트를 일시적으로 제외하고 싶을 때가 있습니다. 이럴 때는 @unittest.skip(<reason>) 데코레이터를 사용하면 됩니다.

import unittest

class TestString(unittest.TestCase):
    @unittest.skip("check skipped tests")
    def test_upper(self):
        self.assertEqual('TUTOR'.lower(), 'tutor')

    def test_islower(self):
        self.assertTrue('tutor'.islower())
        self.assertFalse('Tutor'.islower())

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

실행 결과

s.
------------------------------------------
Ran 2 tests in 0.000s
OK (skipped=1)

데코레이터가 적용된 테스트는 실행되지 않고 건너뛰어지며, 결과에 (skipped=1)처럼 건너뛴 테스트 수가 함께 표시됩니다. 참고로 skip 외에도 조건부로 건너뛰는 @unittest.skipIf(), @unittest.skipUnless() 데코레이터도 유용하게 활용할 수 있습니다.

마무리

이번 글에서는 파이썬 3.x 환경에서 unittest 모듈을 사용해 단위 테스트를 작성하는 기본 방법을 살펴보았습니다. TestCase 작성, assert 메서드를 활용한 검증, 테스트 결과 해석, 그리고 skip 데코레이터를 통한 테스트 제외까지 익혔다면, 이제 실제 프로젝트에 단위 테스트를 적용해 코드의 안정성과 신뢰성을 한층 높여 보세요.