Pytest에서 예외 처리를 올바르게 테스트하는 방법
assert와 함께 예외 테스트하기
Pytest를 사용하면 Python 코드의 특정 부분이 예외를 올바르게 발생시키는지 확인할 수 있습니다. 예외 처리 테스트는 프로그램이 예상대로 동작하고 있는지 검증하는 중요한 단계입니다. 이를 위해 pytest.raises
를 사용할 수 있으며, 이 함수는 코드 블록에서 예외가 발생하는지 확인합니다.
예시 코드
1
2
3
4
5
import pytest
def test_example():
with pytest.raises(ValueError):
int("abc")
여기서는 int("abc")
가 ValueError
를 발생시킬 것으로 예상하고 테스트합니다. pytest.raises
함수 안에 있는 코드가 ValueError
를 발생시키면 테스트가 통과합니다.
예외 메시지까지 확인하기
가끔은 단순히 예외가 발생하는지만 확인하는 것이 아니라, 예외 메시지까지 검증해야 할 경우가 있습니다. 이럴 때는 pytest.raises
의 match
파라미터를 사용하면 됩니다. match
파라미터는 발생한 예외의 메시지가 주어진 문자열과 일치하는지 검사합니다.
예시 코드
1
2
3
4
5
import pytest
def test_example():
with pytest.raises(ValueError, match="invalid literal"):
int("abc")
이 코드는 int("abc")
가 ValueError
를 발생시키는지, 그리고 발생한 예외의 메시지에 “invalid literal”라는 문자열이 포함되어 있는지 확인합니다.
다양한 예외를 확인하기
특정 코드 블록이 여러 종류의 예외를 발생시킬 수 있을 때는 어떻게 해야 할까요? 이럴 때는 pytest.mark.parametrize
데코레이터를 사용하면 됩니다. 이 데코레이터는 여러 가지 입력과 예상되는 예외를 한번에 테스트할 수 있게 도와줍니다.
예시 코드
1
2
3
4
5
6
import pytest
@pytest.mark.parametrize("test_input, expected_exception", [("abc", ValueError), ("", ValueError)])
def test_example(test_input, expected_exception):
with pytest.raises(expected_exception):
int(test_input)
이 코드는 int("abc")
가 ValueError
를 발생시키고, int("")
역시 ValueError
를 발생시키는지 확인합니다. 여러 가지 예외를 효율적으로 테스트할 수 있습니다.
이러한 방법을 사용하면 Pytest를 활용해 예외 처리를 정확하고 효율적으로 테스트할 수 있습니다.