1

我试图让PHP_CodeCoverage库为最简单的情况工作以创建 HTML 代码覆盖率报告,但失败了。我安装了 PHP 和 Xdebug。我宁愿不指定我正在使用的版本,因为我希望我忽略了一些简单的东西,但我会根据要求提供这些细节。现在,我只想说,我正在使用它们的非常新版本。

为了使它尽可能简单,我将它提炼成 2 个文件,但我仍然无法让它做我想做的事。这2个文件是composer在安装coverage库时自动生成的vendor/autoload.php,以及正在使用该库的文件。该文件位于project-root/src/CoverageTest.php. 自动加载文件位于project-root/vendor/autoload.php.

当我php src/CoverageTest.php从终端运行时,它会生成一个 HTML 报告。当我查看报告时,在代码覆盖率表中,只有一行设置为“n/a”或“0/0”。它不报告任何覆盖范围存在或缺失。它没有说任何关于特定文件、类、函数或行的内容。在很大程度上,您在此测试文件中看到的代码与其README 页面上的代码相同。这是代码:

<?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');
4

1 回答 1

2

它仅报告列入白名单的文件和目录。这就是我如何获得我发布的示例的方式。在创建覆盖对象之前,我创建了一个过滤器对象,如下所示:

$filter = new \SebastianBergmann\CodeCoverage\Filter();

由于该示例只是试图覆盖自己,因此我使用过滤器将该文件列入白名单,如下所示:

$filter->addFileToWhitelist(__FILE__);

然后在创建覆盖对象时,像这样传入过滤器:

$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');
于 2017-08-26T04:05:24.947 回答