Python после основ: тесты, объекты и управление ресурсами

Код уже решает задачу, но изменения становятся дорогими: тесты зависят от порядка запуска, кэш удерживает объекты, а подмена внешнего сервиса почему-то не срабатывает. Здесь собраны разборы для разработчика, который уже пишет функции и хочет понимать поведение приложения. Выбирайте симптом, воспроизводите его на небольшом примере и оставляйте тест, который заметит повторение ошибки.

Тест не замечает поломку

Сначала определите, какое поведение должно измениться при ошибке. Если подмена не действует, проверьте имя, которое реально использует тестируемый модуль. Если mock принимает любые аргументы, изменившийся интерфейс может остаться незамеченным.

Выбрать monkeypatch или mock в pytest.

Объекты неожиданно делят состояние

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

Сравнить dataclass, NamedTuple и обычный класс.

Обёртка изменила интерфейс функции

Декоратор может сохранить результат вычисления, но изменить сигнатуру или привязку метода. Сравните вызов исходной функции и обёртки с позиционными и именованными аргументами; отдельно проверьте неверный вызов.

Распаковка аргументов и сигнатуры функций.

Ресурс живёт дольше нужного

Найдите владельца ресурса и момент завершения работы. Закрытие при успешном проходе ещё не покрывает исключение, ранний выход из цикла и несколько открытых объектов. В контрольном примере прервите работу посередине.

Закрепить нормальный сценарий, границы и исключения в тестах.

Продолжить обучение

Практику объектов, типизации и тестирования можно продолжить в бесплатном курсе Python для продвинутых. Для дальнейшего разбора функций, декораторов и возможностей объектов откройте программу платного курса Python для профессионалов. Выбирайте продолжение по тому, чего сейчас не хватает вашему коду.

Продолжить на практике

  • Python для продвинутых: ООП, типизация и тестирование ↗

    Практический курс-мост от базового Python к разработке поддерживаемых приложений. Вы разберётесь со структурой пакетов, объектной моделью, современной типизацией и автоматическими тестами, а затем соедините эти инструменты в небольшом приложении с хранением данных и логированием.