
Страница официальной документации по установке PHPUnit на английском языке: https://phpunit.de/manual/current/en/installation.html
Рассмотрим способы установки подробно.
1. Composer
Довольно простой и в настоящее время оптимальный способ - с помощью менеджера зависимостей для PHP - Composer. Более-менее большой проект, как правило, использует данный инструмент, к тому же Composer имеет автозагрузчик который удобно использовать и для подключения тестируемого кода.Узнать текущую версию PHPUnit можно тут. В примерах установки мы будем устанавливать версию 5.7. Более поздние версии требуют наличия PHP 7+ А PHPUnit 5.7 поддерживается на PHP 5.6, PHP 7.0 и PHP 7.1
Итак, команда для Composer устанавливающая PHPUnit версии 5.7:
composer require --dev phpunit/phpunit ^5.7Если нужно - расширение для тестов с базой данных
composer require --dev phpunit/dbunitУстановив можно запустить тестирование командой из корня проекта:
vendor\bin\phpunit testsтут имеется ввиду, что тесты будут храниться в папке tests, расположеной в корне приложения на уровне файла composer.json в противном случае нужно указать другой путь к папке с тестами.
Чтобы не набирать каждый раз строку vendor\bin\phpunit, можно:
1) Если нужно только для текущего проекта - создать файл phpunit.bat в корневой папке приложения с содержимым:
@ECHO OFF setlocal DISABLEDELAYEDEXPANSION SET BIN_TARGET=%~dp0vendor\phpunit\phpunit\phpunit php "%BIN_TARGET%" %*После этого можно будет запускать тестирование так:
phpunit unit
2) Установить phpunit глобально, чтобы вызывать простой командой (phpunit) из любой директории любого проекта:
composer global require --dev phpunit/phpunit ^5.7Это установит phpunit в директорию текущего пользователя, например:
C:\Users\username\AppData\Roaming\Composer\vendor
и сохранит запускающий файл в папке vendor\bin пользователя. Далее нужно прописать путь к этому файлу в системную переменную PATH (если нет еще), добавить путь к папке bin:
C:\Users\username\AppData\Roaming\Composer\vendor\binгде username заменить на имя пользователя.
Если файл, методы которого хотим протестировать, не подключаются автоматически в тестирующем его классе, то нужно сделать это самостоятельно. Т.к. используется Composer, то делать это лучше всего с помощью его автозагрузчика. Для этого нужно отредактировать объект «autoload» в файле composer.json. Например кое-где для демонстрации тестирования я классам присвоил пространство имен main, а сами файлы положил в корень проекта. В таком случае получилось:
"autoload": { "psr-4": { "main\\": "" } }Теперь классы с пространством имен «main» автоматически будут найдены в корне проекта.
Или, например, создал в корне каталог app с файлами классов, которые нужно тестировать. Для того, что бы эти классы автоматически подключались нужно прописать:
"autoload": { "classmap": ["app"] }
После внесения изменений в composer.json нужно обновить автозагрузчик:
composer dump-autoload -o
Если PHPUnit устанавливался глобально, то предварительно нужно подключить автозагрузчик приложения (обычно это автозагрузчик Composera), чтобы файлы классов, которые нужно протестировать, автоматически подключались в классах тестов. PHPUnit позволяет выполнить определенный код, а в данном случае загрузить автозагрузчик Composera до выполнения тестирования с помощью параметра bootstrap, который должен указывать на файл подключающий этот автозагрузчик и/или что-то еще.
Параметр bootstrap можно:
1) указывать в командной строке при вызове phpunit:
phpunit --bootstrap tests/bootstrap.phpили можно подключить сразу автозагрузчик Composera напрямую:
phpunit --bootstrap vendor/autoload.php
2) указать в конфигурационном файле phpunit.xml:
<phpunit bootstrap="./tests/bootstrap.php"> …или, если нужно только лишь подключить автозагрузчик Composera:
<phpunit bootstrap="./vendor/autoload.php"> …
Если указываем подключение файла bootstrap.php, то создаем его в папке tests:
<?php require __DIR__ .'/../vendor/autoload.php';теперь классы приложения будут подключены.
Если при создании приложения не используется php-фреймворк, а PHPUnit установлен не глобально (в папку vendor проекта) - не забываем сами подключить автозагрузчик Composer в "точке входа", обычно это index.php
require_once './vendor/autoload.php';тут рассчитано, что индексный файл у вас находится на уровне каталога vendor (который появляется после использования Composer), т.е., возможно, понадобится подняться на уровень-два выше к данному каталогу.
Используя Composer вам не придется использовать аналогичную конструкцию типа require для подключения тестируемого класса, как это часто указано в примерах использования PHPUnit в интернете.
Осталось добавить, что при написании тестов в PHPUnit установленного с помощью Composer, ваш тестирующий класс (содержащий тесты) должен наследовать от класса phpunit:
class ClassnameTest extends PHPUnit\Framework\TestCase {}
2. Ручная установка
2.1 Установка вручную для Windows.
Скачать файл с последней версией PHPUnit https://phar.phpunit.de/phpunit.phar
Последний релиз требует PHP 7+, чтобы получить поддержку PHP 5.6, скачать:
https://phar.phpunit.de/phpunit-5.7.17.phar
Устанавливать будем в папку с php. При этом путь к интерпретатору php должен быть прописан в системную переменную PATH.
Итак, поместить файл в каталог с интерпретатором php (где находится файл php.exe), например W:\modules\php\PHP-5.6.
Перейти в каталог с PHP.exe, например у меня на OpenServere:
cd W:\modules\php\PHP-5.6создать файл phpunit.bat в данном каталоге, чтобы получить доступ к phpunit из любой папки (например из корня своего приложения), а не только находясь в папке с php куда он установлен:
@php "%~dp0phpunit-5.7.17.phar" %*где вместо 5.7.17 указать версию скачанного файла.
Или так:
echo @php "%~dp0phpunit.phar" %*>phpunit.batПроверим появился ли доступ:
phpunit --version
Файл с тестируемым классом нужно подключить в классе который его будет тестировать:
require_once dirname(__FILE__).'/../User.php';или использовать автозагрузчик классов. Можно так же для автозагрузки подключить и использовать Composer, правда в таком случае проще и установку phpunit делать с его же помощью.
Тестирующий класс (содержащий тесты) должен наследовать от класса phpunit:
class ClassnameTest extends PHPUnit_Framework_TestCase{}
2.2 Установка вручную для Linux.
Делаем согласно документации https://phpunit.de
wget https://phar.phpunit.de/phpunit-5.7.phar chmod +x phpunit-5.7.phar sudo mv phpunit-5.7.phar /usr/local/bin/phpunitТут первой строкой скачиваем файл с phpunit, далее даем файлу права на запуск b потом переименовываем файл phpunit-5.7.phar в phpunit для удобства.
Так же можно скачать самую последнюю версию phpunit командой:
wget https://phar.phpunit.de/phpunit.pharПосле установки проверяем phpunit командой:
phpunit --version
3. Установка с помощью PEAR
PEAR - это предшественник Composer, репозиторий PHP-классов. В настоящее время в данном репозитории находится устаревшая версия PHPUnit, тем не менее опишу и данный способ установки данного фреймворка для тестирования.Прежде всего нужно установить (активировать) PEAR.
Опишу установку для Open Server, он содержит в себе все необходимые компоненты для этого.
В папке с интерпретатором php (например W:\modules\php\PHP-5.6) находится файл go-pear.bat и папка PEAR.
Для установки перейти из командной строки в корень папки php:
cd W:\modules\php\PHP-5.6выполнить файл go-pear.bat, для этого набрать в консоли:
go-pearвыбрать в диалогах:
(system|local) [system] : local
Please confirm local copy by typing 'yes' : yes
нажать Enter
Would you like to alter php.ini <W:\modules\php\PHP-5.6\php.ini>? [Y/n] : y
нажать Enter
проверить установился ли PEAR:
pear list
Теперь устанавливаем PHPUnit:
pear install PHPUnitпроверить появился ли доступ:
phpunit --version
Тестирующий класс (содержащий тесты) должен наследовать от класса phpunit:
class ClassnameTest extends PHPUnit_Framework_TestCase{}
Данная статья является одной из серии статей про фреймворк для тестирования PHPUnit. Читайте так же:
- Основы PHPUnit - 1 часть.
- Основы PHPUnit - 2 часть.
- PHPUnit - тестирование исключений, анализ покрытия кода тестами.
- PHPUnit - создание и использование имитирующих объектов (mock), заглушек.