Laravel & PHP Deep — фреймворки и пакеты

PHPUnit ломается не там, где падает тест, а там, где тест слишком много обещает

PHPUnit ломается не там, где падает тест, а там, где тест слишком много обещает

Если тесты стали медленнее и шумнее, сначала проверь не код, а саму форму проверки. Частые проблемы:
— один тест зависит от порядка запуска;
— фикстуры создаются через общие статические объекты;
— в ассертах проверяют не поведение, а внутренности класса;
— мокают всё подряд, включая то, что проще поднять настоящим объектом.

Хороший PHPUnit-тест отвечает на один вопрос: «если я меняю поведение, сломаю ли я контракт?». Для этого держи тест коротким, изолированным и с одним смыслом. Если в одном методе есть и подготовка, и сложный акт, и пять проверок — это уже мини-сценарий, а не unit-тест.

Ещё одна типовая ловушка: тестируют то, что и так гарантирует фреймворк или библиотека. Такой код только раздувает suite и добавляет ложную уверенность. Лучше прикрыть свои адаптеры, бизнес-ветки и места, где есть преобразование данных, условия, исключения, границы.

Сильный набор на PHPUnit — это не максимум моков, а минимум сюрпризов. Если тест сложно прочитать за 10 секунд, его почти наверняка сложно и поддерживать.
Этот пост опубликован в Telegram-канале Laravel & PHP Deep — фреймворки и пакеты. Подписаться можно по ссылке: @laravel_php_deep.
tech

Свежие посты в категории «Tech Infrastructure»

Все каналы категории →

start

Готовы запустить рекламу через сеть public.tg?

Новый оффер, продукт, GEO, кейс, событие или партнёрский запуск — соберём маршрут под задачу и отдадим медиаплан.

Telegram для медиаплана: @AFFtop_connect. Быстрый тест: $20 за канал, $1000 за пакет по сети.