如何直接使用PHP_CodeCoverage库?

时间:2017-08-26 02:10:21

标签: php php-code-coverage

我正在努力让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');

1 个答案:

答案 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');