Description
Q | A |
---|---|
php-code-coverage version | 9.2.21 |
PHP version | 8.1.7 |
Driver | Xdebug |
Xdebug version (if used) | 3.1.5 |
Installation Method | Composer |
Usage Method | PHPUnit |
PHPUnit version (if used) | 9.5.26 |
Some valuable precision in the identification of executable lines is lost as a result of #964. I have not reviewed that PR carefully enough to judge its merits, but I see how the concerns raised by @mvorisek can manifest as a regression in real-world test suites. I appreciate the many, many hours of effort by the contributors working on this issue and I hope that we can find a solution that is still friendly to mutation testing without impacting precision.
For example, in 9.2.20, only the branches of a match expression that were actually executed were displayed as covered. In 9.2.21, the entire match expression is now reported as being covered, even though it is not. It was quite useful to know which branches were being exercised by the test.
I'm having a bit of deja vu here, because I reported a nearly identical regression to match expression coverage in #904, which was fixed somewhere between 9.2.13 and 9.2.20! :)
Here is an example class:
<?php declare(strict_types=1);
class MatchExpr {
public int $result;
public function __construct(int $value) {
$this->result = match ($value) {
0 => 4,
1 => 5,
2 => 6,
3 => 7,
default => 8,
};
}
}
And here is the corresponding test:
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;
use MatchExpr;
/**
* @covers MatchExpr
*/
class MatchExprTest extends TestCase {
/**
* @testWith [0, 4]
* [2, 6]
* [9, 8]
*/
public function test_happy_path(int $value, int $expected): void {
self::assertSame($expected, (new MatchExpr($value))->result);
}
}
Coverage report in 9.2.20 (only 3 of the 5 branches are covered, as expected):
Coverage report in 9.2.21 (all branches are marked as covered):
Thank you for your time!