파이썬에서 doctest
를 사용한 예외 확인
파이썬으로 코드를 작성할 때, 우리는 종종 오류 처리와 관련하여 함수가 예상대로 작동하는지 확인해야 합니다. 일반적인 시나리오는 특정 조건에서 함수가 예외를 발생시키는지를 테스트하는 것입니다. 파이썬의 doctest
모듈을 사용하여 테스트를 수행하는 경우, **doctest
로 예외가 발생하는지 확인할 수 있을까?**라는 질문이 생길 수 있습니다. 대답은 확실한 ‘예’입니다! 파이썬 함수에서 예외를 확인하는 방법을 살펴보겠습니다.
문제: 예외 테스트하기
foo(x)
라는 함수가 있다고 가정해 보겠습니다. 이 함수는 인수가 0보다 작으면 예외를 발생시키도록 설계되어 있습니다. 여기서 핵심 질문은 이 시나리오에서 함수가 올바르게 작동하는지를 확인하는 doctest
를 어떻게 작성하느냐입니다. 구체적으로 0보다 작은 값을 전달할 때 예외가 발생하여 문제가 발생했다는 것을 알 수 있도록 하고 싶습니다.
예제 함수
다음은 foo(x)
함수의 간단한 버전입니다:
def foo(x):
if x < 0:
raise ValueError("x는 0이상이어야 합니다.")
return x
해결책: doctest
작성하기
예외를 체크하는 doctest
를 생성하기 위해 다음과 같은 접근 방식을 활용하겠습니다. 우리 doctest
에서는 예외가 발생해야 하는 값을 사용하여 foo()
를 호출할 때 예외가 발생할 것으로 예상한다고 명시할 수 있습니다. 다음은 단계별로 수행하는 방법입니다:
1단계: Doctest 작성하기
함수의 docstring에 예상되는 예외를 보여주는 테스트 케이스를 추가할 수 있습니다. 다음은 그 예입니다:
def foo(x):
"""
x가 0 이상이면 x를 반환합니다.
예외:
ValueError: x < 0 인 경우 발생.
예시:
>>> foo(-1)
Traceback (most recent call last):
...
ValueError: x는 0이상이어야 합니다.
>>> foo(3)
3
"""
if x < 0:
raise ValueError("x는 0이상이어야 합니다.")
return x
2단계: Doctest 실행하기
doctest
를 실행하려면, 파이썬 스크립트의 가장 하단에 다음 코드를 포함시킵니다:
if __name__ == "__main__":
import doctest
doctest.testmod()
3단계: 예상 출력
스크립트를 실행하면 doctest
가 docstring에 있는 예제를 처리합니다. 모든 것이 정상적으로 작동하면, 출력이 없으며(모든 테스트가 통과했음을 나타냄) 예외가 예상대로 발생하지 않는 경우 doctest
는 오류를 보고합니다.
추가 자료
모듈에서 doctest
를 효과적으로 사용하는 방법에 대한 더 많은 정보를 원하신다면, 공식 doctest 모듈 문서를 확인하세요.
결론
doctest
를 사용하여 예외가 올바르게 발생하는지를 검증하는 것은 단순히 가능할 뿐만 아니라, 간단합니다! 함수의 docstring에 몇 줄을 추가함으로써, 코드의 동작을 효과적으로 문서화하고 테스트할 수 있으며, 예상되는 패턴에 부합하는지 확인할 수 있습니다. 새로운 함수를 작성하든 기존 함수를 테스트하든, doctest
는 코드와 함께 예시 기반 테스트를 포함할 수 있는 강력한 방법을 제공합니다. 코드의 강건성을 높이고 즐겁게 코딩하세요!