100% покрытие кода различными версиями PHP в Travis-CI

Я работаю над своим пайп-проектом Pipes и стараюсь максимально приблизиться к 100% охвату кода (я использую Coveralls) для этого).

Проблема, с которой я сталкиваюсь, заключается в следующем: как получить 100% покрытие кода различными версиями PHP? На данный момент мой проект не содержит кода для конкретной версии, но, скорее всего, он скоро изменится.

Я хотел бы получить 100% покрытие кода для PHP 5.4, даже если код, связанный с генераторами, не будет выполняться при тестировании против 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: я знаю, что Code Coverage - это не серебряная пуля.

1 ответ

Используя другой пример, я 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 метод, как описано. Но это не так:

Другие вопросы по тегам