Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 함수에서 예외 발생 여부를 테스트하는 방법

Python에서 단위 테스트(unittest)를 작성할 때, 함수가 예상한 예외를 던지지 않는 경우에만 실패하도록 테스트를 구성해야 할 때가 있습니다. 즉, 특정 상황에서 Python 함수가 실제로 예외(exception)를 발생시키는지 검증하는 것이죠.

예를 들어, Python의 타입 안정성(type-safety)을 테스트하기 위해 Python 셸에 아래 샘플 코드를 입력해 보겠습니다.

예제 코드

import unittest
class MyTestCase(unittest.TestCase):
    def test_1_cannot_add_int_and_str(self):
        with self.assertRaises(TypeError):
            1 + '1'

    def test_2_cannot_add_int_and_str(self):
        import operator
        self.assertRaises(TypeError, operator.add, 1, '1')

unittest.main(exit=False)

테스트 실행 결과

위 테스트를 실행하면 터미널에 다음과 같은 출력이 나타납니다.

..
----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK

코드 설명

첫 번째 테스트(test_1)는 assertRaises컨텍스트 매니저(context manager)로 사용하는 방식입니다. 이 방식은 오류가 제대로 잡히고 정리(cleanup)되면서 기록되도록 보장해 주기 때문에 가장 권장되는 방법입니다.

두 번째 테스트(test_2)처럼 컨텍스트 매니저 없이 작성하는 것도 가능합니다. 이 경우 첫 번째 인자에는 발생할 것으로 기대하는 예외 타입을, 두 번째 인자에는 테스트하려는 함수를 전달하고, 나머지 위치 인자(args)와 키워드 인자(keyword args)는 해당 함수에 그대로 전달됩니다.

다만 컨텍스트 매니저를 사용하는 첫 번째 방식이 훨씬 더 간결하고 가독성이 뛰어나므로, 실무에서는 이 방식을 사용하는 것이 좋습니다.

결과적으로 위 테스트가 통과했다는 것은, 정수 1과 문자열 '1'을 더하려고 시도했을 때 기대한 대로 TypeError가 발생한다는 것을 의미합니다.