Travis-CI中使用不同PHP版本的100%代码覆盖率

时间:2014-11-19 01:20:41

标签: php code-coverage travis-ci coveralls

我正在处理我的宠物项目Pipes并尝试尽可能接近100%的代码覆盖率(我正在使用Coveralls)。

我面临的问题是:如何使用不同的PHP版本获得100%的代码覆盖率?截至目前,我的项目不包含特定于版本的代码,但很快就会发生变化。

我希望获得PHP 5.4的100%代码覆盖率,即使在针对5.4进行测试时也不会执行生成器相关代码。

任何人都可以就如何保持我的承保统计数据负责提供策略或建议吗?

这是我的.travis.yml

language: php

php:
  - 5.6
  - 5.5
  - 5.4
  - hhvm

install:
  - composer require satooshi/php-coveralls:~0.6@stable

before_script:
  - curl -s http://getcomposer.org/installer | php
  - php composer.phar install --dev
  - mkdir -p build/logs

script:
  - phpunit --coverage-clover build/logs/clover.xml

after_success:
  - sh -c 'if [ "$TRAVIS_PHP_VERSION" != "hhvm" ]; then php vendor/bin/coveralls -v; fi;'

这是我的phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
    backupStaticAttributes="false"
    colors="true"
    convertErrorsToExceptions="true"
    convertNoticesToExceptions="true"
    convertWarningsToExceptions="true"
    processIsolation="false"
    stopOnFailure="false"
    stopOnError="false"
    stopOnIncomplete="false"
    stopOnSkipped="false"
    syntaxCheck="false"
    bootstrap="vendor/autoload.php">
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory>./tests/</directory>
        </testsuite>
    </testsuites>
    <!-- Add a filter to make sure we don't count venders and Tests in the coverage report -->
    <filter>
        <whitelist>
            <directory suffix="Test.php">./src</directory>
            <exclude>
                <directory>./docs</directory>
                <directory>./vendor</directory>
                <directory>./tests</directory>
            </exclude>
        </whitelist>
    </filter>
</phpunit>
PS:我知道代码覆盖率不是银弹。

1 个答案:

答案 0 :(得分:0)

使用另一个例子found,我发现@requires会对代码覆盖率产生负面影响。例如:

<?php

require_once('class.php');

class FooTest extends PHPUnit_Framework_TestCase {
    /**
    * @requires PHP 5.5
    * @covers Foo::greater
    */
    public function testGreater() {
        $x = new Foo();
        $this->assertSame(2, $x->greater());
    }

    public function testLesser() {
        $x = new Foo();
        $this->assertSame(1, $x->lesser());
    }
}

<?php
class Foo {
    public function greater() {
        return 2;
    }

    public function lesser() {
        return 1;
    }
}

在我看来,@ covers应强制代码覆盖以标记greater方法。但是,它没有:

enter image description here