Настройка unit-тестирования с PHPUnit и PhpStorm IDE

Unit-тестирование это хорошо. Много хороших статей написано о том как прекрасно это взять класс и для него написать юнит-тест. Позавчера вот Андрей Солнцев даже про расширение к TDD рассказывал — BDD. А большинство программистов по прежнему не используют.. просто потому что сложно даже настроить. Вот попробуем это для php сделать.

Прежде всего понадобится свой локально установленный php — я поставил последнюю 5.3.3 thread safe x86версию. До этого я пробовал всякие WAMP, XAMPP, Apache2triad, Денвер.. и отсюда все проблемы которые далее возникли.

Ставим PEAR запустив в консольном режиме php с гигантским файликом установки go-pear.php — я его положил в папку с установленным php. Если у вас уже есть старенький PEAR, то pear.bat upgrade обновит его.

Установщик сам всё подкачает и распакует. У меня правда вылазили deprecation-ошибки и ошибки винды «CGI / FastCGI has stopped working» из-за параллельно существовавшего старого Apache2Triad пака. Пришлось его удалить и поменять путь к php (прямо в диалоге установки)
Теперь ставим библиотеку PHPUnit — ничего скачивать заранее не надо, PEAR подгрузит всё сам..
pear channel-discover pear.phpunit.de
pear install phpunit/PHPUnit

Опять возникли ошибки из-за того что PHP_PEAR_INSTALL_DIR is not set correctly. Пришлось ставить вручную

set PHP_PEAR_INSTALL_DIR=C:Program Filesphppear
set PHP_PEAR_BIN_DIR=C:Program Filesphppear
set PHP_PEAR_PHP_BIN=C:Program Filesphpphp.exe

Оказывается  PHPUnit хочет левые каналы используются из symphony-project.com… добавляем их и установка  проходит в штатном режиме

Связываем PHPStorm

В детальном описании настройки всё идеально. А у меня при создании теста возникает ошибка об отсутствии файла E_WARNING: PHPUnit/Framework.php.

На форуме это объясняют путями к PEAR — IDE и у меня ругается при настройке путей к php на несовместимость с каким-то «оригинальным путём к php» который почему-то C:php5pear.. А всё потому что include_path не установлен из-за отсутсвия php.ini в C:Windows. Копируем из установочной php-папки прототип php.ini, ставим туда правильную include_path переменную — теперь PHPStorm пути видит правильно.

Запускаем генерирование тестов и опять облом. Видимо PHPUnit новей чем PHPStorm 1.0, который всё ещё пытается включить файл который включать не стоит.

Обновляем IDE до 2.0 и вуаля — тесты генерируются! Но при запуске теста почему-то вылетает ошибка о нечитаемом файле. Лезем в Fileloader.php и закомментирываем exception и о чудо..

Теперь уже можно разбираться с тест-пакетами, синтаксисом..

В Zend Studio 8.0 после этого может возникнуть ошибка Fatal error: require_once() [function.require]: Failed opening required ‘PHPUnit/TextUI/TestRunner.php’  in C:Program FilesZendZend Studio — 8.0.0pluginscom.zend.php.phpunit_8.0.0.v20101001-0100resourcesZendPHPUnit.php on line 87. Для этого переименуйте во что-нибудь PHPUnit из PEAR папки и скопируйте поставляемую в качестве плагина зендовскую phpunit на уровень выше.