phpunit/php-code-coverage

Library that provides collection, processing, and rendering functionality for PHP code coverage information.

Maintainers

👁 sebastian

Package info

github.com/sebastianbergmann/php-code-coverage

pkg:composer/phpunit/php-code-coverage

Statistics

Installs: 929 835 851

Dependents: 1 686

Suggesters: 9

Stars: 8 930

Open Issues: 12

14.2.2 2026-06-08 11:50 UTC

Requires

Requires (Dev)

Suggests

  • ext-pcov: PHP extension that provides line coverage
  • ext-xdebug: PHP extension that provides line coverage as well as branch and path coverage

Provides

None

Conflicts

None

Replaces

None

BSD-3-Clause 10d7da3628a99289cdf4c662dd7f0d73f1baec83

  • Sebastian Bergmann <sebastian.woop@phpunit.de>

testingcoveragexunit

This package is auto-updated.

Last update: 2026-06-16 04:15:24 UTC


README

👁 Latest Stable Version
👁 CI Status
👁 codecov

Provides collection, processing, and rendering functionality for PHP code coverage information.

Installation

You can add this library as a local, per-project dependency to your project using Composer:

composer require phpunit/php-code-coverage

If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency:

composer require --dev phpunit/php-code-coverage

Usage

Collecting code coverage data and generating a report

<?php declare(strict_types=1);
use SebastianBergmann\CodeCoverage\CodeCoverage;
use SebastianBergmann\CodeCoverage\Driver\Selector as DriverSelector;
use SebastianBergmann\CodeCoverage\Filter;
use SebastianBergmann\CodeCoverage\Report\Facade as ReportFacade;

$filter = new Filter;

$filter->includeFiles(
 [
 '/path/to/file.php',
 '/path/to/another_file.php',
 ],
);

$coverage = new CodeCoverage(
 (new DriverSelector)->forLineCoverage($filter),
 $filter,
);

$coverage->start('<name of test>');

// ...

$coverage->stop();

ReportFacade::fromObject($coverage)->renderOpenClover('/tmp/openclover.xml');

Generating a report from serialized code coverage data

<?php declare(strict_types=1);
use SebastianBergmann\CodeCoverage\Report\Facade as ReportFacade;
use SebastianBergmann\CodeCoverage\Serialization\Unserializer;

$data = (new Unserializer)->unserialize('/path/to/coverage.php');

ReportFacade::fromSerializedData($data)->renderOpenClover('/tmp/openclover.xml');