PHP: Автоматическое тестирование
Теория: Матчеры
Любое утверждение можно превратить в проверку на истинность:
Проблема в том, что в таком случае пострадает вывод. Отлаживать такие проверки значительно сложнее, чем специализированные проверки, заточенные под конкретную ситуацию. PHPUnit поставляется с большим числом готовых утверждений, часть из которых используется достаточно часто. Здесь мы рассмотрим некоторые из них.
Массивы
Рассмотрим проверки для массивов:
Строки
Перейдем к проверкам для строк:
Печать на экран
Иногда результат работы кода доступен только как вывод в консоль. В таком случае не существует никакого возврата значения из функции, которое можно сравнить с ожидаемым. Для таких ситуаций в PHPUnit есть несколько специализированных утверждений. Они перехватывают вывод (STDOUT) и дают возможность проверить его:
В этом коде expectOutputString() проверяет точное соответствие, что не всегда удобно. Если хочется проверить только часть вывода, то можно воспользоваться другим способом:
Ошибки
Обработка ошибочных ситуаций — это тоже логика, которую нужно программировать и тестировать. Когда что-то идет не так, вызываемый код может выбрасывать исключения:
Исключения не работают как возврат из функций. Вместо этого, они поднимаются по стеку вызовов, до тех пор пока их не перехватят. Поэтому в PHPUnit для работы с исключениями используется специальное утверждение expectException():
Очень важно вызывать expectException() до кода, который выбрасывает исключение. Если исключение выброшено, то весь код после него не вызывается.
Это далеко не все утверждения, которые есть в PHPUnit. Более того, PHPUnit может расширяться собственными проверками. В целом, вам придется постоянно заглядывать в документацию, чтобы вспомнить, что там есть.
.png)


