Одной из распространенных задач при написании тестов на Python с использованием библиотеки pytest является проверка того, что определенный блок кода вызывает ожидаемое исключение. Это может быть полезно, если код предназначен для обработки определенных ошибок или исключений, и нужно убедиться, что он работает правильно.
Рассмотрим код, который должен вызвать исключение ZeroDivisionError:
def divide_by_zero(): return 9/0
Тест для этой функции может выглядеть следующим образом:
def test_divide_by_zero(): try: divide_by_zero() except ZeroDivisionError as e: pytest.fail(e, pytrace=True)
Однако, это не будет работать так, как ожидалось. Вместо того чтобы показать трассировку исключения, pytest просто укажет, что тест не прошел.
Чтобы корректно проверить возникновение исключения и получить трассировку, следует использовать контекстный менеджер pytest.raises
. Это специальный блок кода, который проверяет, что внутри него возникает определенное исключение.
Используя pytest.raises
, тест для функции divide_by_zero
будет выглядеть так:
def test_divide_by_zero(): with pytest.raises(ZeroDivisionError): divide_by_zero()
Теперь, если функция divide_by_zero
вызывает исключение ZeroDivisionError
, тест будет пройден успешно. Если же исключение не возникает или возникает исключение другого типа, тест не пройдет, и pytest предоставит трассировку исключения, что поможет в отладке.
Таким образом, использование pytest.raises
позволяет не только удобно проверять возникновение исключений, но и получать полезную информацию для отладки в случае неудачного теста.
Добавить комментарий