Aggregating code coverage from several executions of PHPUnit

前端 未结 1 2027
死守一世寂寞
死守一世寂寞 2020-12-13 14:04

I have been working with PHPUnit for a little while now, and it\'s starting to look like I may need to break my tests up into groups that would run as separate executions of

相关标签:
1条回答
  • 2020-12-13 14:40

    Use the "--coverage-php" option to PHPUnit to get it to write the coverage data as a serialized PHP_CodeCoverage object, then combine them using PHP_CodeCoverage::merge, like this:

    <?php
    /**
     * Deserializes PHP_CodeCoverage objects from the files passed on the command line,
     * combines them into a single coverage object and creates an HTML report of the
     * combined coverage.
     */
    
    if ($argc <= 2) {
      die("Usage: php generate-coverage-report.php cov-file1 cov-file2 ...");
    }
    
    // Init the Composer autoloader
    require realpath(dirname(__FILE__)) . '/../vendor/autoload.php';
    
    foreach (array_slice($argv, 1) as $filename) {
      // See PHP_CodeCoverage_Report_PHP::process
      // @var PHP_CodeCoverage
      $cov = unserialize(file_get_contents($filename));
      if (isset($codeCoverage)) {
        $codeCoverage->filter()->addFilesToWhitelist($cov->filter()->getWhitelist());
        $codeCoverage->merge($cov);
      } else {
        $codeCoverage = $cov;
      }
    }
    
    print "\nGenerating code coverage report in HTML format ...";
    
    // Based on PHPUnit_TextUI_TestRunner::doRun
    $writer = new PHP_CodeCoverage_Report_HTML(
      'UTF-8',
      false, // 'reportHighlight'
      35, // 'reportLowUpperBound'
      70, // 'reportHighLowerBound'
      sprintf(
        ' and <a href="http://phpunit.de/">PHPUnit %s</a>',
        PHPUnit_Runner_Version::id()
          )
      );
    
    $writer->process($codeCoverage, 'coverage');
    
    print " done\n";
    print "See coverage/index.html\n";
    

    You may also be able to merge the files using a tool named phpcov, as described here: https://github.com/sebastianbergmann/phpunit/pull/685

    0 讨论(0)
提交回复
热议问题