julianseeger/php-real-coverage

基于现有的php-code-coverage报告计算实际覆盖率

dev-master 2014-03-13 13:14 UTC

This package is not auto-updated.

Last update: 2024-09-28 13:09:21 UTC


README

Build Status Code Coverage Scrutinizer Quality Score License Latest Stable Version

什么是“实际”覆盖率?

假设你有一个简单的类

class SomeClass
{
    public function someFunction()
    {
        $instance = "important message";    // this line is important
        $a = "This code";
        $b = "is completely";
        $c = "usesless";
        $instance .= "!!!";                 // this one is important too
        if (true) {
            $f = "and has";
            $g = "100% coverage";
        }
        $c .= "!";
        return $instance;                   // and this one is important
    }
}

并为这个类编写了一个相当无用的测试,大多数行为未经过测试

class SomeClassTest extends \PHPUnit_Framework_TestCase
{
    public function testThisTestIsStupid()
    {
        $sut = new SomeClass();
        $instance = $sut->someFunction();

        $this->assertEquals("important message!!!", $instance);
    }
}

但无论如何,这个测试为这个类产生了100%的覆盖率

当你在这个项目上运行 php-real-coverage

那么你就会知道,哪些行实际上是经过测试的

在这个例子中,只有第8行、第12行和第18行是必须的,才能使测试通过。

快速入门

将其添加到你的composer.json文件中

"require-dev": {
    "julianseeger/php-real-coverage": "*"
}

使用phpunit生成覆盖率报告

./vendor/bin/phpunit --coverage-php coverage.php

然后让php-real-coverage测试你覆盖率的质量

./vendor/bin/php-real-coverage coverage.php

0.1-Beta版本路线图

  • 添加代理自动加载器
  • 处理非composer自动加载器(包装现有的自动加载器)
  • 在多态代理中保持原始方法签名(严格支持)
  • 允许非命名空间类
  • 支持魔法方法
  • 重写RealCoverageRun的原型(“主”方法)
  • 向phpunit传递适当的参数
  • 支持引导(类似于phpunit中的"--bootstrap")

1.0版本路线图

  • 集成symfony/console
  • 仅运行覆盖修改行的测试(大大提高速度)
  • 将钩子添加到主算法中,以允许监听器/打印器等
  • 支持所有默认的phpunit覆盖率编写器(html,文本,clover,php)
  • 审查和重构架构

限制

  • 仅与phpunit一起使用

期待扩展到其他框架,前提是有受众

  • 不支持phpunit 4

一旦phpunit 4稳定,我将同时集成对phpunit 3和4的支持

  • 你可能在你项目中滥用反射或动态加载时遇到问题,因此php-real-coverage可能不会为doctrine等使用

  • 不支持hhvm

我目前缺乏任何hhvm的经验,但看起来它支持phpunit,所以我期待着改变这一点。

贡献

执行测试

composer install --prefer-dist --dev
./vendor/bin/phpunit

确保你的更改经过测试并且符合PSR-2

再次执行测试

并提交你的Pull Request

PS:如果测试覆盖率低于100%,构建将失败