B09.파이썬 unittest 기본

학습 목표

이번 강의에서는 Python의 unittest 모듈을 사용하여 코드를 테스트하는 방법을 배웁니다. 이를 통해 코드의 품질을 높이고, 버그를 사전에 발견하는 방법을 익히게 됩니다.

개념 설명

유닛 테스트는 코드의 개별 단위가 예상대로 작동하는지 검증하는 과정입니다. unittest 모듈은 파이썬 표준 라이브러리로, 테스트 케이스를 생성하고 실행할 수 있는 기능을 제공합니다. 기본적인 테스트 흐름은 다음과 같습니다:

  • 테스트할 함수를 정의합니다.
  • unittest.TestCase 클래스를 상속받은 클래스를 정의합니다.
  • 그 클래스 내에서 테스트 메서드를 정의합니다. 메서드 이름은 일반적으로 test_로 시작해야 합니다.
  • unittest.main()을 호출하여 테스트를 실행합니다.

예제 코드

# 테스트할 함수
def add(a, b):
    return a + b

# 유닛 테스트 클래스 정의
import unittest

class TestAddFunction(unittest.TestCase):
    def test_add_positive_numbers(self):
        self.assertEqual(add(1, 2), 3)  # 1 + 2 = 3
    
    def test_add_negative_numbers(self):
        self.assertEqual(add(-1, -1), -2)  # -1 + -1 = -2

    def test_add_zero(self):
        self.assertEqual(add(0, 0), 0)  # 0 + 0 = 0

# 테스트 실행
if __name__ == "__main__":
    unittest.main()  # 모든 테스트 메서드를 실행

코드 설명

이 코드는 unittest 모듈을 사용하여 간단한 덧셈 함수를 테스트하는 예제입니다.

  • add 함수는 두 수의 합을 반환합니다.
  • TestAddFunction이라는 클래스는 unittest.TestCase를 상속받아 테스트 케이스를 정의합니다.
  • 각 테스트 메서드는 self.assertEqual 메서드를 사용하여 기대 결과와 실제 값을 비교합니다.
  • 메인 블록에서 unittest.main()을 호출하여 모든 테스트를 실행합니다.

연습 문제

1. 두 수를 곱하는 함수를 작성하고, 이 함수의 유닛 테스트를 작성해 보세요.

2. 문자열을 반전시키는 함수를 작성하고, 이 함수의 유닛 테스트를 작성하여 문자열의 원본과 결과가 동일한 위치에 있는지 확인하세요.

연습 문제 해답

# 1번 문제: 곱셈 함수
def multiply(a, b):
    return a * b

# 유닛 테스트 클래스 정의
class TestMultiplyFunction(unittest.TestCase):
    def test_multiply_positive_numbers(self):
        self.assertEqual(multiply(2, 3), 6)  # 2 * 3 = 6

    def test_multiply_negative_numbers(self):
        self.assertEqual(multiply(-1, -1), 1)  # -1 * -1 = 1

    def test_multiply_by_zero(self):
        self.assertEqual(multiply(0, 5), 0)  # 0 * 5 = 0

# 2번 문제: 문자열 반전 함수
def reverse_string(s):
    return s[::-1]

# 유닛 테스트 클래스 정의
class TestReverseStringFunction(unittest.TestCase):
    def test_reverse_string(self):
        self.assertEqual(reverse_string("hello"), "olleh")  # 'hello'의 반전

    def test_reverse_empty_string(self):
        self.assertEqual(reverse_string(""), "")  # 빈 문자열 반전

if __name__ == "__main__":
    unittest.main()  # 모든 테스트 메서드를 실행
### 설명 - **unittest 모듈 사용**: 각 테스트 케이스가 테스트할 함수를 정의하고, 예상 결과와 실제 값을 비교하여 코드의 정확성을 검사하도록 구성되어 있습니다. - 연습 문제를 통해 사용자가 다양한 함수에 대해 유닛 테스트를 작성하고, 이를 통해 더 안전한 코드를 작성할 수 있는 능력을 쌓을 수 있도록 돕습니다. - 이 과정은 프로그래밍을 하면서 코드를 실수로 변경하거나 잘못된 동작을 유도했을 때, 이러한 실수를 빠르고 쉽게 발견하여 수정할 수 있는 필수적인 방법입니다.

댓글 쓰기

0 댓글