Поскольку PhpUnit имеет собственную реализацию для запуска файлов PHPT, которая происходит в отдельном процессе, получение покрытия кода , интегрированного с PhpUnit, может оказаться довольно сложным.
Однако, если всепотребность в покрытии (или вы готовы сделать некоторую постобработку самостоятельно) становится довольно тривиальной.
В самой простой форме все, что вам нужно сделать, это сделать вызовы xDebug из ваших файлов PHPT.Используя PHP_CodeCoverage (и Composer для автозагрузки классов) ваш раздел --FILE--
может выглядеть следующим образом:
--FILE--
<?php
/* autoload classes */
require __DIR__ . '/../../../vendor/autoload.php';
/* Setup and start code coverage */
$coverage = new \PHP_CodeCoverage;
$coverage->start('test');
/* run logic */
$prFiles = prFiles::getInstance()->transfer(
$_FILES,
__DIR__ . '/../_data/',
'test.txt'
);
var_dump($prFiles);
/* stop and output coverage data */
$coverage->stop();
$writer = new \PHP_CodeCoverage_Report_PHP;
$writer->process($coverage, __DIR__ . '/../../../build/log/coverage-data.php');
?>
Все собранные данные покрытия будут помещены в файл coverage-data.php
.
Вы можете загрузить эту информацию и объединить ее с другой информацией покрытия (например, из PhpUnit), чтобы создать вывод в любом формате, который вы хотите.
Логика покрытия может быть помещена в отдельный класс, оставляя вастолько две строки для добавления к каждому тесту, который вы хотите охватить:
--FILE--
<?php
/* autoload classes */
require __DIR__ . '/../../../vendor/autoload.php';
cover::start;
/* run logic */
$prFiles = prFiles::getInstance()->transfer(
$_FILES,
__DIR__ . '/../_data/',
'test.txt'
);
var_dump($prFiles);
cover::stop;
?>
и класс cover
:
<?php
class cover
{
private static $coverage;
/* Setup and start code coverage */
public static function start()
{
self::$coverage = new \PHP_CodeCoverage;
/* Make sure this file is not added to the coverage data */
$filter = self::$coverage->filter();
$filter->addFileToBlacklist(__FILE__);
self::$coverage->start('test');
}
/* stop and output coverage data */
public static function stop()
{
self::$coverage->stop();
$writer = new \PHP_CodeCoverage_Report_PHP;
$writer->process(self::$coverage, __DIR__ . '/../build/log/coverage-data.php');
}
}
Поскольку логика покрытия находится за пределами PHPTфайл вы можете легко получить доступ к файлам конфигурации или добавить другую логику.