07 Июл 2023
2 мин
470

Правильное использование assert для проверки возникновения исключений в pytest

Одной из распространенных задач при написании тестов на Python с использованием библиотеки pytest является проверка того, что определенный блок кода вызывает

Содержание

Одной из распространенных задач при написании тестов на 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 позволяет не только удобно проверять возникновение исключений, но и получать полезную информацию для отладки в случае неудачного теста.

Содержание

Добавить комментарий

Узнай профессию по рисунку