
PHPUnit – это самая известная в мире система для юнит-тестирования приложений, написанных на языке PHP. Автор сия творения – Себастьян Бергман, хотя проект оупенсорсный и его пишет много-много людей.
В данной статье я рассмотрю установку PHPUnit и вкратце объясню, как им пользоваться.
Что такое юнит-тесты?
Идея юнит-тестирования состоит в том, чтобы проверять на корректность небольшие участки больших программ – прогонять на некоторых «хитрых» тестовых наборах данных.
Нужно ли использовать юнит-тесты на каждом проекте? Я бы сказал, что далеко не всегда. Однако они просто необходимы на любом долгосрочном проекте.
Установка PHPUnit на Windows
Для начала убедитесь, что у вас установлена корректная версия PHP (на данный момент поддерживается версия PHP не ниже 5.6), а также установлен Composer.
Самый простой способ установить PHPUnit – это скачать PHP архив (PHAR), который содержит все необходимые (а также некоторые дополнительные) зависимости PHPUnit в комплекте в одном файле.
Для установки вам, возможно, надо будет включить в php.ini расширение OpenSSL. В общем, установка PHAR слегка похожа на процедуру ручной установки Composer на Windows:
- Создайте каталог для PHP бинарных файлов; например, C:\bin;
- В переменную среды PATH добавьте «;c:\bin»;
- Скачайте https://phar.phpunit.de/phpunit.phar;
- Если файл в названии содержит версию, переименуйте его в «phpunit.phar» и поместите в папку C:\bin;
- Запустите командную строку Windows (Комбинация клавиш Windows + R , введите cmd и нажмите Enter);
- Создайте обёрточный BAT-файл (C:\bin\phpunit.cmd): [code=bash]C:\Users\username> cd C:\bin C:\bin> echo @php "%~dp0phpunit.phar" %* > phpunit.cmd C:\bin> exit[/code]
Закройте и заново откройте командную строку или перейдите в любую другую папку, отличную от c:\bin и попробуйте запустить phpunit --version. Вы должны увидет версию PHPUnit и копирайт:
C:\Users\username> phpunit --version PHPUnit x.y.z by Sebastian Bergmann and contributorsПодготовка проекта к тестированию
Для начала нам необходимо инициализировать автозагрузчик классов, который будет связывать пространства имён (namespace) с директориями проекта.
Например, нам надо чтобы при написании use SQL\Mysql нам подключался файл libs\sql\mysql.php, в файле composer.json необходимо написать:
[code=javascript]{ "autoload": { "psr-0": {" ": "libs/"} } }[/code]Composer – это большая такая штука для управлением зависимостями, но мы её пока будем использовать просто для создания автозагрузчика. Далее необходимо из командной строки в папке проекта выполнить composer install.
D:\WORK\project-example>composer install Loading composer repositories with package information Updating dependencies (including require-dev) Nothing to install or update Generating autoload filesПосле данных манипуляций должна появится директория vendor, в которой (среди кучи вспомогательных файлов) будет заветный autoload.php. Можно было автозагрузчик написать самим всего в несколько строк кода, но мы же ленивые программисты. К тому же composer нам ещё пригодится.
У PHPUnit есть два варианта запуска – с параметрами в командной строке или с файлом конфигурации. Мы пойдём по второму пути – в папке проекта создаём файл phpunit.xml. В данном файле мы опишем структуру тестов для нашего проекта. Вот пример:
[code=xml]Как видите, файл состоит из секций testsuite, каждая секция описывает набор тестов. Далее в каждом тестовом наборе мы указываем какие файлы тестов подключать. Можно подключать как отдельные файлы, так и целые директории.
Приступим к созданию самих тестов.
Написание простейшего теста
Основные концепции и шаги для написания тестов на PHPUnit:
- Тесты для класса Class следует именовать ClassTest.
- ClassTest обычно наследуется от PHPUnit\Framework\TestCase.
- Все тесты – это публичные методы нашего ClassTest, их название должно начинаться на test.
- Внутри этих методов для проверки чего-либо следует вызывать assert-методы. Такие как assertEquals(), например. Но на самом деле их большое количество.
Пример теста из документации (тестирование обычных массивов):
[code=php]use PHPUnit\Framework\TestCase; class StackTest extends TestCase{ public function testPushAndPop() { $stack = []; $this->assertEquals(0, count($stack)); array_push($stack, 'foo'); $this->assertEquals('foo', $stack[count($stack)-1]); $this->assertEquals(1, count($stack)); $this->assertEquals('foo', array_pop($stack)); $this->assertEquals(0, count($stack)); } }[/code]Как видите, ничего сложного.
Послесловие
Ну что ж, теперь стоит попробовать написать свою тестовую программу или же попробовать модульное тестирование на уже готовом проекте – уверен, что покрыв библиотеки тестами, вы только улучшите качество кода.
Кроме того, PHPUnit можно использовать нестандартно – я, например, использую его для проверки лабораторных работ в рамках маленького курса по алгоритмам и структурам данных.
Комментарии
По большой части - да.
Для себя нашел пользу в 2-х случаях:
1. Полезно на более-менее больших проектах (длительностью разработки более года)
2. Проверялка лабораторных работ
Пардон, имелось в виду версия не ниже 5.6.
Поправил.
Adding comments is temporarily disabled for unregistered users.