Python: Продвинутое тестирование
2026-02-26 20:00 Diff

В этом уроке мы начнем погружаться в тестирование и обсудим нюансы, которые возникают в тестировании приложений.

Основные тесты, которые нужно писать — это тесты на успешные сценарии работы. Но в некоторых ситуациях код должен возвращать ошибки, и их тоже бывает нужно проверять. Под ошибками понимаются ситуации, в которых код генерирует исключение.

Посмотрим на примере такого теста:

Этот код пытается протестировать ситуацию, при которой функция function_with_exception() генерирует исключение, если ей передать 0. Как думаете, этот тест проверит, что функция действительно порождает исключение?

На самом деле, нет. Если функция function_with_exception() не сгенерирует исключение, то тест пройдет, потому что код не попадет в блок except.

В Pytest встроен контекстный менеджер, который самостоятельно отлавливает исключение и проверяет, что оно вообще было сгенерировано:

Здесь raises перехватывает только те исключения, которые являются подтипами переданного класса. Благодаря этому мы можем управлять ожидаемым поведением и ловить только те ошибки, которые хотим поймать.

Более того, можно проверить конкретное сообщение, которое пришло вместе с исключением: