PHP: Автоматическое тестирование
2026-02-26 18:32 Diff

Каждую проверку, которую мы написали для функции capitalize(), в тестировании принято называть утверждением (assert).

Утверждения — это ключевая часть тестов. Именно они проверяют функциональность кода:

Можно заметить, что все проверки строятся одинаковым способом: условие => исключение. PHP внутри себя содержит конструкцию assert(), которая упрощает написание проверок:

Конструкция assert(true) означает положительный результат, а assert(false) говорит об ошибке. Последний вариант выбрасывает исключение с таким сообщением:

Это сообщение можно перевести так: «Ожидалось, что значением выражения будет истина, но оказалось, что это ложь». Кроме сообщения, выводится бэктрейс, по которому можно найти сработавшее утверждение:

В целом, assert() сделал наш код короче и проще для восприятия. Положительная проверка смотрится естественнее, потому что это то, что мы ожидаем.

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

Единственный способ понять, что произошло — открывать код с упавшим утверждением и отлаживать его, выводя значения переменных. Это пытаются исправить с помощью webmozart/assert и других специализированных библиотек. Перепишем код выше с ее использованием:

Синтаксис Assert::eq() означает, что перед нами класс Assert, у которого вызывается статический метод (функция) eq(). К сожалению, в PHP невозможно обойти использование классов даже в начале обучения. Сейчас просто запомните этот синтаксис, а подробнее о нем мы поговорим в курсах по ООП.

Вывод таких утверждений значительно понятнее:

В этом выводе есть не только информация об ошибке, но и данные, которые передавались в утверждение. Такой формат упрощает анализ проблемы и ускоряет отладку.

Для тестирования негативных сценариев предназначена функция Assert::notEq(). Она тестирует то, что значения не равны:

Библиотека webmozart/assert содержит несколько десятков функций-утверждений для разных ситуаций и типов данных. Умение их правильно использовать приходит с опытом и после нескольких попыток чтения документации.