Самоучитель: PHP 8.5: инженерный практикум
Глава 20 из 22VI. Качество и выпуск120 минут

Глава 20. Тестовая пирамида, статический анализ и deprecations

Тест защищает контракт и отрицательный сценарий; количество assertions не заменяет проверку границ, конкурентного изменения и реальной базы.

После главы вы сможете
  • распределить тесты по уровням
  • проверить отрицательные сценарии
  • подготовить обновление PHP

Каждый уровень отвечает на свой вопрос

Unit-тест проверяет чистое правило без базы. Integration-тест доказывает mapping, SQL и транзакцию на целевой СУБД. HTTP-тест проверяет маршрут, валидацию и статус. Browser smoke подтверждает критичный пользовательский поток.

Не переносите всё в E2E: такие тесты медленнее и хуже указывают причину. Но mock PDO не доказывает, что запрос работает. Выберите минимальный дорогой тест для каждого инфраструктурного риска.

Поток доказательств

Уровни проверкиСлои дополняют друг друга: верхний не отменяет точные нижние проверки.UnitrulesIntegrationDB/clockHTTPcontractBrowsercritical pathProductionsignals
Слои дополняют друг друга: верхний не отменяет точные нижние проверки.

Отрицательный сценарий важнее копии реализации

Для публикации проверьте отсутствие подходов, чужого владельца, конфликт version, отказ history insert и повтор idempotency key. Тест, который повторяет те же if в ожидаемом значении, почти ничего не доказывает.

Fixtures называют смысл: workoutDraftOwnedBy, conflictingPublishedWorkout. Огромный общий seed делает тесты связанными и скрывает, какой факт нужен сценарию.

Статический анализ видит форму потока

Анализатор уточняет shape массива, nullable-ветви, недостижимый код и несовместимые вызовы. Он не доказывает право доступа или верность SQL, но сокращает класс ошибок до запуска.

Уровень усиливают постепенно: сначала новый код и критичные каталоги, затем baseline сокращается отдельными изменениями. Бесконечный baseline превращает инструмент в декоративный отчёт.

Обновление PHP 8.5

Перед сменой ветки включите все deprecation-сообщения в CI, прочитайте migration guide, обновите зависимости и запустите полный набор на целевом интерпретаторе. PHP 8.5 устаревшим объявляет ряд неканонических cast-имён и некоторые старые magic serialization методы.

Новые возможности вводятся после обновления production-runtime, а не до него. Pipe operator и clone with остаются за feature branch, пока минимальная платформа проекта допускает 8.4.

Лабораторная работа

Составьте матрицу тестов публикации тренировки и план обновления 8.4→8.5. Для каждого риска укажите самый дешёвый уровень, который действительно его обнаруживает.

Локальный прогресс

Закрепите материал

Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.

Перелинковка со справочником

Проверка актуальности

  • php.nethttps://www.php.net/releases/8.5/en.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • php.nethttps://www.php.net/manual/en/migration85.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • getcomposer.orghttps://getcomposer.org/doc/03-cli.mdПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.

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

Данные этого сервиса

Настройки cookie и локальных данных

Аналитика

Текущий статус: не выбран. До согласия обе аналитические системы не загружаются.

Локальные данные

Удаление затрагивает только ключи PHP-сервиса в этом браузере и требует подтверждения.

Политики

Политика конфиденциальности · Политика использования файлов cookie