diff --git a/src/Util/Test.php b/src/Util/Test.php index f8339ba8f82..b77b174d0b5 100644 --- a/src/Util/Test.php +++ b/src/Util/Test.php @@ -162,12 +162,18 @@ public static function requiresCodeCoverageDataCollection(TestCase $test): bool return true; } - // If there is no @covers annotation but a @coversNothing annotation - // then code coverage data does not need to be collected + // If there is no @covers annotation but a @coversNothing annotation on + // the test class then code coverage data does not need to be collected if (isset($annotations['class']['coversNothing'])) { return false; } + // If there is no @covers annotation but a @coversNothing annotation on + // the test method then code coverage data does not need to be collected + if (isset($annotations['method']['coversNothing'])) { + return false; + } + // If there is no @coversNothing annotation then // code coverage data may be collected return true; diff --git a/tests/_files/CoverageNothingTest.php b/tests/_files/CoverageCoversOverridesCoversNothingSameDocblockTest.php similarity index 86% rename from tests/_files/CoverageNothingTest.php rename to tests/_files/CoverageCoversOverridesCoversNothingSameDocblockTest.php index cdb6efb41bc..56dfab10d1e 100644 --- a/tests/_files/CoverageNothingTest.php +++ b/tests/_files/CoverageCoversOverridesCoversNothingSameDocblockTest.php @@ -9,7 +9,7 @@ */ use PHPUnit\Framework\TestCase; -class CoverageNothingTest extends TestCase +class CoverageCoversOverridesCoversNothingSameDocblockTest extends TestCase { /** * @covers CoveredClass::publicMethod diff --git a/tests/_files/CoverageNothingClassTest.php b/tests/_files/CoverageNothingClassTest.php new file mode 100644 index 00000000000..a6c134e4b46 --- /dev/null +++ b/tests/_files/CoverageNothingClassTest.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +use PHPUnit\Framework\TestCase; + +/** + * @coversNothing + */ +class CoverageNothingClassTest extends TestCase +{ + public function testSomething(): void + { + $o = new CoveredClass; + $o->publicMethod(); + } +} diff --git a/tests/_files/CoverageNothingMethodTest.php b/tests/_files/CoverageNothingMethodTest.php new file mode 100644 index 00000000000..0b5fab11b61 --- /dev/null +++ b/tests/_files/CoverageNothingMethodTest.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +use PHPUnit\Framework\TestCase; + +class CoverageNothingMethodTest extends TestCase +{ + /** + * @coversNothing + */ + public function testSomething(): void + { + $o = new CoveredClass; + $o->publicMethod(); + } +} diff --git a/tests/unit/Util/TestTest.php b/tests/unit/Util/TestTest.php index dbac231b523..8fa8cc896a2 100644 --- a/tests/unit/Util/TestTest.php +++ b/tests/unit/Util/TestTest.php @@ -1069,7 +1069,9 @@ public function testGetLinesToBeCovered($test, $lines): void $expected = [TEST_FILES_PATH . 'CoveredClass.php' => $lines]; } elseif ($test === 'CoverageNoneTest') { $expected = []; - } elseif ($test === 'CoverageNothingTest') { + } elseif ($test === 'CoverageNothingMethodTest') { + $expected = false; + } elseif ($test === 'CoverageNothingClassTest') { $expected = false; } elseif ($test === 'CoverageFunctionTest') { $expected = [ @@ -1292,7 +1294,11 @@ public function getLinesToBeCoveredProvider(): array \range(31, 35), ], [ - 'CoverageNothingTest', + 'CoverageNothingClassTest', + false, + ], + [ + 'CoverageNothingMethodTest', false, ], [ @@ -1332,18 +1338,20 @@ public function testCanSkipCoverage($testCase, $expectedCanSkip): void { require_once TEST_FILES_PATH . $testCase . '.php'; - $test = new $testCase; - $canSkipCoverage = Test::requiresCodeCoverageDataCollection($test); + $test = new $testCase('testSomething'); + $coverageRequired = Test::requiresCodeCoverageDataCollection($test); - $this->assertEquals($expectedCanSkip, $canSkipCoverage); + $this->assertEquals($expectedCanSkip, !$coverageRequired); } public function canSkipCoverageProvider(): array { return [ - ['CoverageClassTest', true], - ['CoverageNothingTest', true], + ['CoverageClassTest', false], + ['CoverageCoversOverridesCoversNothingSameDocblockTest', false], ['CoverageCoversOverridesCoversNothingTest', false], + ['CoverageNothingClassTest', true], + ['CoverageNothingMethodTest', true], ]; }