2

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

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

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

任何人都可以提供有关如何让我的覆盖率统计负责的策略或建议吗?

这是我的.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:我知道代码覆盖率不是灵丹妙药。

4

1 回答 1

1

使用另一个示例 I 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方法标记为已覆盖。但是,它不会:

在此处输入图像描述

于 2015-02-01T13:10:20.633 回答