В этом уроке мы начнем погружаться в тестирование и обсудим нюансы, которые возникают в тестировании приложений.
Основные тесты, которые нужно писать — это тесты на успешные сценарии работы. Но в некоторых ситуациях код должен возвращать ошибки, и их тоже бывает нужно проверять. Под ошибками понимаются ситуации, в которых код генерирует исключение.
Посмотрим на примере такого теста:
def test_exception():
try:
function_with_exception(0)
except Exception as e:
assert e
Этот код пытается протестировать ситуацию, при которой функция function_with_exception()
генерирует исключение, если ей передать 0
. Как думаете, этот тест проверит, что функция действительно порождает исключение?
На самом деле, нет. Если функция function_with_exception()
не сгенерирует исключение, то тест пройдет, потому что код не попадет в блок except
.
В Pytest встроен контекстный менеджер, который самостоятельно отлавливает исключение и проверяет, что оно вообще было сгенерировано:
import pytest
def test_exception():
with pytest.raises(Exception):
function_with_exception(0)
Здесь raises
перехватывает только те исключения, которые являются подтипами переданного класса. Благодаря этому мы можем управлять ожидаемым поведением и ловить только те ошибки, которые хотим поймать.
Более того, можно проверить конкретное сообщение, которое пришло вместе с исключением:
import pytest
def test_exception():
# Добавляем: as e. Здесь e – произвольное имя переменной, содержащей исключение
with pytest.raises(Exception) as e:
function_with_exception(0)
assert str(e.value) == 'expected message from exception'
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.