Python 강좌 / 자동 테스트 작성하기: unittest와 경계값 검사

자동 테스트는 정한 입력에 대한 결과나 예외를 반복해서 확인하는 코드입니다. 구현 줄을 그대로 따라 확인하기보다 사용자가 기대하는 동작과 경계·실패 조건을 고정해야 변경 중 회귀를 발견할 수 있습니다.

테스트할 규칙부터 정하기

합계 함수는 비음수 정수 목록을 받고 빈 목록의 합은 0으로 정합니다. bool과 문자열은 허용하지 않습니다. 정상 결과뿐 아니라 잘못된 입력이 조용히 합산되지 않는지도 확인합니다. 시간·네트워크·사용자 파일에 의존하지 않는 작은 함수부터 시작하면 재현하기 쉽습니다.

관련 동작과 지원 조건은 자동 테스트 작성하기: unittest와 경계값 검사 관련 공식 문서에서 확인할 수 있습니다.

unittest는 표준 라이브러리입니다. 테스트 파일은 test_로 시작하고 테스트 메서드도 test_로 시작하게 구성합니다. 출력 문자열만 보고 사람이 판정하는 방식과 달리 실패 시 실행 결과에 반영됩니다.

함수와 테스트 전체 파일

expense_math.py 파일의 전체 내용입니다.

def total(amounts):
    if any(type(x) is not int or x < 0 for x in amounts):
        raise ValueError("invalid amount")
    return sum(amounts)

test_expense_math.py 파일의 전체 내용입니다.

import unittest
from expense_math import total

class TotalTests(unittest.TestCase):
    def test_regular(self):
        self.assertEqual(total([3500, 8000, 2500]), 14000)

    def test_empty(self):
        self.assertEqual(total([]), 0)

    def test_invalid(self):
        for values in [[-1], [True], ["8000"]]:
            with self.subTest(values=values):
                with self.assertRaises(ValueError):
                    total(values)

if __name__ == "__main__":
    unittest.main()
python -m unittest -v

세 테스트가 성공하고 마지막에 OK가 표시되어야 합니다. 세 번째 테스트는 subTest로 세 가지 잘못된 입력을 나누어 확인합니다. 표시 시간과 세부 줄 배치는 실행 환경에 따라 달라집니다.

실패를 한 번 만들어 확인하기

  1. 함수의 반환값을 sum(amounts)+1로 바꾸고 정상·빈 목록 테스트가 실패하는지 확인합니다.
  2. 원래 구현으로 되돌려 다시 OK가 되는지 확인합니다.
  3. 예외 검사를 제거하면 잘못된 입력 테스트가 실패하는지 비교하고 복구합니다.

테스트가 항상 통과하는지만 보지 말고 잘못된 구현을 실제로 잡는지 한 번 확인하면 테스트의 의도를 점검할 수 있습니다. 의도적인 실패 상태를 최종 코드에 남기지 않습니다.

단위 테스트와 통합 검증 범위

함수 테스트가 통과해도 CSV 열 이름이나 DB 연결 설정이 맞는지는 알 수 없습니다. 파일·DB를 연결하는 통합 테스트는 별도 임시 경로와 독립 데이터로 수행하고 운영 데이터를 사용하지 않습니다.

확인 결과에는 Python 버전·명령·성공·실패를 기록합니다. 테스트가 없는 입력과 설치 화면까지 검증했다고 보고하지 않습니다. 빠른 단위 테스트와 필요한 통합 검증을 구분해 반복 가능한 점검 흐름을 만드세요.