我正在努力让PHP_CodeCoverage库为最简单的情况工作,以创建HTML代码覆盖率报告,并且失败。我安装了PHP和Xdebug。我宁愿不指定我正在使用的那些版本,因为我希望有一些简单的我可以忽略,但我会根据要求提供这些细节。现在,足以说,我正在使用它们的新版本。
为了使这个尽可能简单,我把它提炼成2个文件,但我仍然无法做到我想做的事情。这2个文件是由作曲家在安装coverage库时创建的自动生成的vendor / autoload.php,以及使用该库的文件。此文件位于project-root/src/CoverageTest.php
。自动加载文件位于project-root/vendor/autoload.php
。
当我从终端运行php src/CoverageTest.php
时,它会生成HTML报告。当我查看报告时,在Code Coverage表中,只有一行,所有内容都设置为“n / a”或“0/0”。它不会将任何报道报告为现有或缺失。它没有说明具体的文件,类,函数或行。在很大程度上,您在此测试文件中看到的代码与README page上显示的代码相同。这是代码:
<?php
require __DIR__.'/../vendor/autoload.php';
$coverage = new \SebastianBergmann\CodeCoverage\CodeCoverage;
$coverage->start('<name of test>');
class MathGenius
{
public function add($first, $second)
{
return $first + $second;
}
}
$guru = new MathGenius();
$sum = $guru->add(1, 1);
$coverage->stop();
$writer = new \SebastianBergmann\CodeCoverage\Report\Html\Facade;
$writer->process($coverage, __DIR__.'/../code-coverage-report');
答案 0 :(得分:1)
它仅报告列入白名单的文件和目录。这就是我如何得到我发布的工作示例。在创建coverage对象之前,我创建了一个过滤器对象,如下所示:
$filter = new \SebastianBergmann\CodeCoverage\Filter();
由于该示例仅尝试覆盖自身,因此我使用过滤器将该文件列入白名单:
$filter->addFileToWhitelist(__FILE__);
然后在创建coverage对象时,您将传递过滤器,如下所示:
$coverage = new \SebastianBergmann\CodeCoverage\CodeCoverage(null, $filter);
以下是问题代码的固定版本的完整代码:
<?php
require __DIR__.'/../vendor/autoload.php';
$filter = new \SebastianBergmann\CodeCoverage\Filter();
$filter->addFileToWhitelist(__FILE__);
$coverage = new \SebastianBergmann\CodeCoverage\CodeCoverage(null, $filter);
$coverage->start('<name of test>');
class MathGenius
{
public function add($first, $second)
{
return $first + $second;
}
}
$guru = new MathGenius();
$sum = $guru->add(1, 1);
$coverage->stop();
$writer = new \SebastianBergmann\CodeCoverage\Report\Html\Facade;
$writer->process($coverage, __DIR__.'/../code-coverage-report');