본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] unittest로 단위테스트를 완벽하게 구현하는 방법

by Papa Martino V 2025. 7. 24.
728x90

unittest로 단위테스트를 완벽하게 구현하는 방법
[PYTHON] unittest

 

안정적인 소프트웨어는 철저한 테스트에서 시작된다. 그중에서도 단위테스트(Unit Test)는 개발 초기 단계에서 버그를 미리 걸러내고, 코드의 유지보수를 훨씬 수월하게 만들어주는 핵심 도구다. 파이썬에서는 unittest 모듈이 기본적으로 제공되며, 자바의 JUnit, C#의 NUnit처럼 강력한 기능과 직관적인 인터페이스를 제공한다. 이 글에서는 파이썬의 unittest를 실전 개발자의 관점에서 설명하며, 기본 사용법부터 고급 활용까지 체계적으로 소개하겠다.

1. unittest란 무엇인가?

unittest는 Python 표준 라이브러리에 포함된 테스트 프레임워크로, 각 함수 또는 메서드의 동작을 독립적으로 검증하는 단위 테스트를 작성할 수 있게 해준다.

  • 테스트 케이스를 클래스로 구성
  • 테스트 메서드는 test_ 접두어로 정의
  • assert 계열 메서드로 결과 검증
  • 테스트 실행 결과를 리포트 형태로 제공

2. 기본 사용법

예제 코드

import unittest

def add(a, b):
    return a + b

class TestMath(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(2, 3), 5)
        self.assertNotEqual(add(2, 2), 5)

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

위 코드에서는 add 함수를 테스트하는 단위테스트 클래스를 정의하고, 두 개의 테스트 조건을 검증하고 있다. unittest.main()을 통해 CLI에서도 테스트를 쉽게 실행할 수 있다.

3. 자주 사용하는 unittest 메서드

메서드 설명
assertEqual(a, b) a == b인지 확인
assertNotEqual(a, b) a != b인지 확인
assertTrue(x) x가 True인지 확인
assertFalse(x) x가 False인지 확인
assertIs(a, b) a is b인지 확인
assertIsNone(x) x가 None인지 확인
assertRaises(Error) 특정 예외가 발생하는지 확인

4. 테스트 환경 구성 팁

  • setUp(): 테스트 전 사전 작업
  • tearDown(): 테스트 후 정리 작업
  • setUpClass()/tearDownClass(): 클래스 단위 전후 처리
class TestDB(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.conn = connect_db()

    @classmethod
    def tearDownClass(cls):
        cls.conn.close()

    def test_query(self):
        result = self.conn.execute("SELECT 1")
        self.assertEqual(result, 1)
  

5. unittest의 장점과 한계

항목 unittest 장점 unittest 한계
표준성 Python 기본 제공 외부 라이브러리보다 유연성 부족
호환성 기존 프로젝트와 통합 용이 비동기 함수 테스트 복잡
확장성 mock, patch 기능 지원 플러그인 체계 없음

6. 실무 활용 팁

  • 테스트 커버리지를 확인하라: coverage.py를 사용하면 어느 부분이 테스트되지 않았는지 시각적으로 파악할 수 있다.
  • 테스트는 독립적이어야 한다: 테스트 간 상태 공유는 피하고, 각 테스트는 외부에 의존하지 않아야 한다.
  • 테스트 코드도 품질이 중요하다: 테스트가 복잡하면 유지보수 비용이 증가한다. 읽기 쉬운 구조로 작성하자.

7. unittest vs pytest 간단 비교

기능 unittest pytest
내장 여부 Python 표준 라이브러리 외부 설치 필요
사용법 클래스 기반, 구조적 함수 기반, 간결함
확장성 제한적 플러그인 풍부
초보자 친화성 보통 매우 쉬움

8. 마무리: 테스트 없는 개발은 도박이다

단위테스트는 버그를 줄이는 것을 넘어서, 개발자와 협업자 간의 명세 계약서 역할도 한다. unittest는 파이썬 사용자에게 친숙하고, 표준화된 방식으로 테스트 문화를 정착시킬 수 있는 훌륭한 출발점이다. 테스트를 습관화하면 당신의 코드 품질은 눈에 띄게 향상된다. 지금 당장 단위테스트를 시작해보자.


출처 (References)

728x90