phpunit прекратил поддержку установки PEAR. Это вынудило нас использовать phar-установку phpunit, продвигающуюся вперед. У нас есть сценарий обертки, который выполняет итерацию по многим каталогам и вызывает исполняемый файл phpunit в этих каталогах. Затем скрипт wraping объединяет все сгенерированные отчеты в один отчет.
Когда 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 был выполнен, как только была вызвана строка require, прервав сценарий обертки с использованием вывода phpunit. Поскольку вы не можете использовать подстановочные знаки в инструкции php require, я затем медленно создал список файлов, необходимых для завершения нашего сценария обертывания, и потребовал их так:
require 'phar://phpunit-3.7.31.phar/php-code-coverage/CodeCoverage/Report/Clover.php';
Это сработало, когда я выполнил сценарий wrapping из его каталога, а файл phpunit.phar находился в том же каталоге. Тем не менее, попытка выполнить его из другого каталога не удастся сказать, что файл phar не найден на пути включения. Я попытался изменить путь включения, поместить файл .phar в местоположения уже на пути включения и дать абсолютный путь к файлу phar в include, например:
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 для объединения данных покрытия кода из нескольких запусков.