phpunit перестал поддерживать установку PEAR. Это вызвало необходимость использования phar-установки phpunit для продвижения вперед. У нас есть скрипт-обертка, который перебирает множество каталогов и вызывает исполняемый файл phpunit для этих каталогов. Затем сценарий упаковки объединяет все сгенерированные отчеты в один отчет.
Когда phpunit был установлен с PEAR, единственное требование, которое нам было нужно в начале сценария обертки, было
require 'PHP/CodeCoverage/Autoload.php';
Затем, когда сценарий упаковки сделал такие вещи, как
$writer = new PHP_CodeCoverage_Report_Clover();
$writer->process($codeCoverage, "${reportsDir}/clover-coverage.xml");
Автозагрузчик (предположительно) загрузит все необходимое для выполнения этого кода, и мы пойдем по нашему счастливому пути.
Однако с момента перехода на установку phar все стало грязно. Сначала я думал, что мне может потребоваться только сам файл phar, и все будет хорошо.
require 'phpunit-3.7.31.phar';
Однако это привело к выполнению файла phar, как только была нажата строка с требованием, прерывая сценарий оборачивания с выводом использования phpunit. Поскольку вы не можете использовать подстановочные знаки в операторе php require, я затем медленно создал список файлов, необходимых для завершения нашего сценария упаковки, и потребовал их следующим образом:
require 'phar://phpunit-3.7.31.phar/php-code-coverage/CodeCoverage/Report/Clover.php';
Это сработало, когда я выполнил скрипт упаковки из его каталога, а файл phpunit.phar находился в том же каталоге. Однако попытка выполнить его из другого каталога не удалась, сказав, что файл phar не найден в пути включения. Я попытался изменить путь включения, поместить файл .phar в места, уже находящиеся на пути включения, и указать абсолютный путь к файлу phar в файле включения, например:
require 'phar://actual/path/to/file/phpunit-3.7.31.phar/php-code-coverage/CodeCoverage/Report/Clover.php';
Ни одна из этих попыток решить мою проблему не сработала.
Как включить файлы из файла .phar таким образом, чтобы я мог запускать скрипт из любого места в моей системе?
Другой приемлемый ответ — тот, который позволяет мне использовать классы в файле phar, не включая все, что мне нужно по отдельности.
Ubuntu 12.04
PHPUnit 3.7.31 (мы должны остаться на этой версии, но это не влияет на вопрос)
PHAR PHPUnit может быть правильно использован только в качестве библиотеки с PHPUnit 4.2.
Также посмотрите на PHPCOV для объединения данных покрытия кода из нескольких прогонов.
Других решений пока нет …