Вопрос "Тестировать ли своё приложение?" является довольно болезненным для программистов. Многие считают, что достаточно ручного тестирования, другие же не представляют своей жизни без тестов или даже разрабатывают по технологии TDD. Если вы покрываете тестами свой код и разрабатываете на PHP, то эта статья для вас.
Наверняка нет ни одного PHP-разработчика, который бы не знал, что такое PHPUnit. Но далеко не все знают, что это действительно мощная машина для тестирования.
Итак, фичи.
1. Огромное количество аннотаций
В PHPUnit содержится огромное количество аннотаций, которые избавят вас от необходимости дублирования кода, например. Самые применяемые аннотации:
@test - помечает метод как тест. Обычно нужно называть тесты по маске test*, делать это совсем необязательно, тогда необходимо воспользоваться этой аннотацией.
@depends [clone/shadow] - пишется перед зависимым от другого теста тестом, если в зависимом тесте необходимо использовать результаты предыдущего. Clone - глубокая копия, shadow - поверхностная.
@dataProvider - указывает на провайдер данных. Таким образом, не нужно писать несколько одинаковых тестов с разными данными. Данные (массив массивов или объект, унаследованный от класса Iterator, возвращающий массив) можно передать в провайдере.
@backupGlobals - аннотация резервного копирования и восстановления глобальных переменных (но вы же знаете, что играться с глобальными переменными нехорошо =) ).
@backupStaticAttributes - резервное копирование всех статических свойств во всех объявленных классах перед каждым тестом с последующим восстановлением.
@covers - указывает, что данный код покрыт тестом.
@codeCoverageIgnore[Start/End] - указывает, какие куски кода не должны отображаться в отчёте о покрытии кода.
@large/medium/small - если вы настроили PHPUnit таким образом, что тест должен выполняться за определённое время, то данные аннотации укажут, за какое. Допустимое время прохождения теста можно менять в конфигурационном файле.
@requires - объявление конфигураций, при которых должен работать тест. С иными конфигурациями тест пропускается.
Помните:
Всякий раз, когда возникает соблазн что-то распечатать, используя print, или написать отладочное выражение, напишите тест вместо этого.
Мартин Фаулер