2014-11-19 3 views
2

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

Проблема, с которой я столкнулся, заключается в следующем: как получить покрытие 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:[email protected] 

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: Я знаю, что покрытие коды не является панацея.

ответ

0

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

enter image description here