From 63a0a6c5f8dd7eb5bebe85d4917f103e8868b436 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Tue, 21 May 2019 19:37:32 +0800 Subject: [PATCH] Fix #3697 Respect @coversNothing at coverage driver start --- src/Framework/TestResult.php | 6 +++++ .../CoverageMethodNothingCoversMethod.php | 23 +++++++++++++++++++ tests/_files/CoverageMethodNothingTest.php | 1 - tests/unit/Framework/TestResultTest.php | 4 ++-- tests/unit/Util/TestTest.php | 12 ++++++++++ 5 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 tests/_files/CoverageMethodNothingCoversMethod.php diff --git a/src/Framework/TestResult.php b/src/Framework/TestResult.php index fd81c867be9..d8a87e52f9b 100644 --- a/src/Framework/TestResult.php +++ b/src/Framework/TestResult.php @@ -198,6 +198,12 @@ public static function isAnyCoverageRequired(TestCase $test) { $annotations = $test->getAnnotations(); + // If there is 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 any methods have covers, coverage must me generated if (isset($annotations['method']['covers'])) { return true; diff --git a/tests/_files/CoverageMethodNothingCoversMethod.php b/tests/_files/CoverageMethodNothingCoversMethod.php new file mode 100644 index 00000000000..f594452d126 --- /dev/null +++ b/tests/_files/CoverageMethodNothingCoversMethod.php @@ -0,0 +1,23 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +use PHPUnit\Framework\TestCase; + +class CoverageMethodNothingCoversMethod extends TestCase +{ + /** + * @covers CoveredClass::publicMethod + * @coversNothing + */ + public function testSomething(): void + { + $o = new CoveredClass; + $o->publicMethod(); + } +} diff --git a/tests/_files/CoverageMethodNothingTest.php b/tests/_files/CoverageMethodNothingTest.php index 11d65f8e3a8..a3b62788e2b 100644 --- a/tests/_files/CoverageMethodNothingTest.php +++ b/tests/_files/CoverageMethodNothingTest.php @@ -12,7 +12,6 @@ class CoverageMethodNothingTest extends TestCase { /** - * @covers CoveredClass::publicMethod * @coversNothing */ public function testSomething(): void diff --git a/tests/unit/Framework/TestResultTest.php b/tests/unit/Framework/TestResultTest.php index 3334482e21a..467df42f92f 100644 --- a/tests/unit/Framework/TestResultTest.php +++ b/tests/unit/Framework/TestResultTest.php @@ -67,10 +67,10 @@ public function canSkipCoverageProvider(): array { return [ ['CoverageClassTest', false], - ['CoverageClassNothingTest', true], - ['CoverageMethodNothingTest', false], ['CoverageClassWithoutAnnotationsTest', false], ['CoverageCoversOverridesCoversNothingTest', false], + ['CoverageClassNothingTest', true], + ['CoverageMethodNothingTest', true], ]; } diff --git a/tests/unit/Util/TestTest.php b/tests/unit/Util/TestTest.php index 91b5ddbbf0b..c6675fb0e71 100644 --- a/tests/unit/Util/TestTest.php +++ b/tests/unit/Util/TestTest.php @@ -782,10 +782,14 @@ public function testGetLinesToBeCovered($test, $lines): void $expected = [ TEST_FILES_PATH . 'NamespaceCoveredClass.php' => $lines, ]; + } elseif ($test === 'CoverageMethodNothingCoversMethod') { + $expected = false; } elseif ($test === 'CoverageCoversOverridesCoversNothingTest') { $expected = [TEST_FILES_PATH . 'CoveredClass.php' => $lines]; } elseif ($test === 'CoverageNoneTest') { $expected = []; + } elseif ($test === 'CoverageClassNothingTest') { + $expected = false; } elseif ($test === 'CoverageMethodNothingTest') { $expected = false; } elseif ($test === 'CoverageFunctionTest') { @@ -1008,6 +1012,10 @@ public function getLinesToBeCoveredProvider(): array 'NamespaceCoverageCoversClassPublicTest', \range(31, 35), ], + [ + 'CoverageClassNothingTest', + false, + ], [ 'CoverageMethodNothingTest', false, @@ -1016,6 +1024,10 @@ public function getLinesToBeCoveredProvider(): array 'CoverageCoversOverridesCoversNothingTest', \range(29, 33), ], + [ + 'CoverageMethodNothingCoversMethod', + false, + ], ]; }