[파이썬] unittest 예외 테스트하기

Unittest는 Python에서 자동화된 테스트를 작성하고 실행하기 위한 기본적인 유닛 테스트 프레임워크입니다. 이 기능을 사용하면 코드의 모든 경우에 대해 예상대로 작동하는지 확인할 수 있습니다.

자주 발생하는 상황 중 하나는 예외 처리입니다. 코드가 특정 예외를 발생시킬 때를 테스트하고 싶을 때가 있습니다. Unittest를 사용하여 예외를 테스트하는 방법에 대해 알아보겠습니다.

예외 테스트 작성하기

예외 테스트를 작성하는 것은 간단합니다. unittest.TestCase를 상속한 테스트 케이스 클래스 내에서 assertRaises() 메서드를 사용하면 됩니다. 이 메서드는 코드 실행 시 특정 예외가 발생하는지를 확인합니다.

다음은 ValueError 예외를 발생시키는 코드의 예시입니다.

import unittest

def divide(num1, num2):
    if num2 == 0:
        raise ValueError("Cannot divide by zero")
    return num1 / num2

class ExceptionTest(unittest.TestCase):
    def test_divide_by_zero(self):
        self.assertRaises(ValueError, divide, 10, 0)

위의 예제에서 test_divide_by_zero 메서드는 divide 함수를 호출하고, 그 결과로 ValueError가 발생하는지 확인합니다.

예외 메시지 테스트하기

때로는 예외 메시지도 중요한 부분입니다. Unittest는 예외 메시지의 일부분을 검사하여 테스트하는 기능을 제공합니다. assertRaises() 메서드를 사용하면 예외 클래스와 함께 msg 매개변수를 추가하여 예외 메시지의 부분 문자열을 지정할 수 있습니다.

예를 들어, ValueError 예외가 발생하고 메시지에 “zero”라는 단어가 포함되어 있는지 확인하려면 다음과 같이 작성할 수 있습니다.

self.assertRaisesRegex(ValueError, "zero", divide, 10, 0)

컨텍스트 관리자 사용하기

unittest 모듈은 예외를 발생시키는 것을 감지하기 위해 with 문과 함께 assertRaises를 사용할 수도 있습니다. 이렇게 하면 테스트 메서드에서 직접 try-except 블록을 작성하지 않아도 됩니다.

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

마치며

Unittest를 사용하여 예외를 테스트하는 것은 코드의 견고성을 보장하고 예외 상황을 정확하게 처리하도록 도와줍니다. 예외 처리 코드에 버그가 숨어있을 수 있으므로, 적절한 예외 처리 및 예외 상황에 대한 테스트는 중요합니다. Unittest를 활용하여 코드의 신뢰성을 높이고 버그를 미리 찾을 수 있도록 해보세요.