본문 바로가기
카테고리 없음

[파이썬 심화] 유닛 테스트의 뜻, 기본 문법, 실전활용법

by 개발자를 꿈꾸는 사람들과 함꼐 2025. 4. 14.

유닛 테스트란 무엇이며 왜 필요한가?

유닛 테스트(Unit Test)는 프로그램의 가장 작은 단위(함수, 메서드 등)를 테스트하는 방식입니다.
파이썬에서는 unittest 모듈을 활용해 테스트 코드를 쉽게 작성하고 자동화할 수 있습니다.

테스트의 필요성

  • 코드 수정 시 기존 기능이 잘 작동하는지 확인 가능
  • 프로그램 신뢰성 향상
  • 배포 전에 오류 예방
  • 자동화된 테스트로 QA 비용 절감

unittest 모듈 불러오기

import unittest

unittest는 파이썬 표준 라이브러리에 포함되어 있으므로 별도 설치 없이 사용 가능합니다.

 unittest 기본 문법과 테스트 함수 작성

1. 테스트할 함수 정의

📁 calculator.py

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

def divide(a, b):
    if b == 0:
        raise ValueError("0으로 나눌 수 없습니다.")
    return a / b

2. 테스트 코드 작성

📁 test_calculator.py

import unittest
from calculator import add, divide

class TestCalculator(unittest.TestCase):

    def test_add(self):
        self.assertEqual(add(3, 5), 8)
        self.assertEqual(add(-1, 1), 0)

    def test_divide(self):
        self.assertEqual(divide(10, 2), 5)

    def test_divide_by_zero(self):
        with self.assertRaises(ValueError):
            divide(5, 0)

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

해석:

  • unittest.TestCase를 상속받은 클래스에서 테스트 메서드를 작성합니다.
  • 모든 테스트 함수 이름은 반드시 test_로 시작해야 합니다.
  • assertEqual(), assertRaises() 등의 메서드로 예상값 비교 또는 예외 검사

3. 테스트 실행

python test_calculator.py

실행하면 각 테스트 결과가 출력되며, 실패한 경우 어떤 이유로 실패했는지 메시지가 표시됩니다.

유닛 테스트 실전활용법

1. 여러 assert 메서드 활용

  • assertEqual(a, b): a == b
  • assertNotEqual(a, b): a != b
  • assertTrue(x), assertFalse(x)
  • assertIn(x, y): x ∈ y
  • assertIsNone(x): x is None

2. setUp / tearDown 메서드 사용

class TestExample(unittest.TestCase):

    def setUp(self):
        print("테스트 시작 전 실행")

    def tearDown(self):
        print("테스트 종료 후 실행")

각 테스트 함수 전후로 공통 작업이 필요할 경우 setUp()tearDown()을 정의하면 자동으로 호출됩니다.
데이터 초기화, 임시 파일 생성/삭제 등에 활용됩니다.

3. 커맨드라인에서 테스트 디렉터리 전체 실행

python -m unittest discover

discover는 현재 디렉터리 이하의 모든 test_*.py 파일을 자동으로 찾아 실행합니다.
프로젝트 단위 테스트 자동화에 적합합니다.

4. 테스트를 위한 가상 객체 만들기 (mock)

from unittest.mock import Mock

api = Mock()
api.get_data.return_value = {"name": "홍길동"}
print(api.get_data())  # {'name': '홍길동'}

Mock()을 사용하면 외부 API나 DB를 대신해 가짜 객체를 만들 수 있어 의존성 없이 독립적인 테스트가 가능해집니다.

테스트 코드는 개발의 마지막이 아니라 개발의 일부입니다.unittest를 활용한 유닛 테스트는 코드 안정성을 보장하고, 나중에 발생할 버그를 사전에 방지해줍니다. 처음에는 간단한 함수부터 테스트 코드를 작성해보고, 점점 모듈 단위로 확장해보세요. 여러분의 파이썬 프로젝트가 성장할수록 테스트의 중요성도 함께 커질 것입니다. 추가로 pytest와 같은 외부 테스트 프레임워크도 함께 익히면 테스트가 더욱 유연하고 강력해집니다.