From 554306cca23a117302fb96df745c094ab211a57c Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Wed, 22 May 2019 08:51:14 +0800 Subject: [PATCH 1/2] Specify test name when initing TestCase --- tests/_files/CoverageClassNothingTest.php | 22 +++++++++++++++++++ .../CoverageClassWithoutAnnotationsTest.php | 19 ++++++++++++++++ ...Test.php => CoverageMethodNothingTest.php} | 2 +- tests/unit/Framework/TestResultTest.php | 12 ++++++---- tests/unit/Util/TestTest.php | 4 ++-- 5 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 tests/_files/CoverageClassNothingTest.php create mode 100644 tests/_files/CoverageClassWithoutAnnotationsTest.php rename tests/_files/{CoverageNothingTest.php => CoverageMethodNothingTest.php} (90%) diff --git a/tests/_files/CoverageClassNothingTest.php b/tests/_files/CoverageClassNothingTest.php new file mode 100644 index 00000000000..b0355ff11f8 --- /dev/null +++ b/tests/_files/CoverageClassNothingTest.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 CoverageClassNothingTest extends TestCase +{ + public function testSomething(): void + { + $o = new CoveredClass; + $o->publicMethod(); + } +} diff --git a/tests/_files/CoverageClassWithoutAnnotationsTest.php b/tests/_files/CoverageClassWithoutAnnotationsTest.php new file mode 100644 index 00000000000..b02028aaf4e --- /dev/null +++ b/tests/_files/CoverageClassWithoutAnnotationsTest.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +use PHPUnit\Framework\TestCase; + +class CoverageClassWithoutAnnotationsTest extends TestCase +{ + public function testSomething(): void + { + $o = new CoveredClass; + $o->publicMethod(); + } +} diff --git a/tests/_files/CoverageNothingTest.php b/tests/_files/CoverageMethodNothingTest.php similarity index 90% rename from tests/_files/CoverageNothingTest.php rename to tests/_files/CoverageMethodNothingTest.php index e4c831fe35b..11d65f8e3a8 100644 --- a/tests/_files/CoverageNothingTest.php +++ b/tests/_files/CoverageMethodNothingTest.php @@ -9,7 +9,7 @@ */ use PHPUnit\Framework\TestCase; -class CoverageNothingTest extends TestCase +class CoverageMethodNothingTest extends TestCase { /** * @covers CoveredClass::publicMethod diff --git a/tests/unit/Framework/TestResultTest.php b/tests/unit/Framework/TestResultTest.php index e84c5167b01..3334482e21a 100644 --- a/tests/unit/Framework/TestResultTest.php +++ b/tests/unit/Framework/TestResultTest.php @@ -66,8 +66,10 @@ public function testAddErrorOfTypeIncompleteTest(): void public function canSkipCoverageProvider(): array { return [ - ['CoverageClassTest', true], - ['CoverageNothingTest', true], + ['CoverageClassTest', false], + ['CoverageClassNothingTest', true], + ['CoverageMethodNothingTest', false], + ['CoverageClassWithoutAnnotationsTest', false], ['CoverageCoversOverridesCoversNothingTest', false], ]; } @@ -79,8 +81,10 @@ public function testCanSkipCoverage($testCase, $expectedCanSkip): void { require_once TEST_FILES_PATH . $testCase . '.php'; - $test = new $testCase; - $canSkipCoverage = TestResult::isAnyCoverageRequired($test); + $test = new $testCase('testSomething'); + $coverageRequired = TestResult::isAnyCoverageRequired($test); + $canSkipCoverage = !$coverageRequired; + $this->assertEquals($expectedCanSkip, $canSkipCoverage); } } diff --git a/tests/unit/Util/TestTest.php b/tests/unit/Util/TestTest.php index c8ccbfea558..91b5ddbbf0b 100644 --- a/tests/unit/Util/TestTest.php +++ b/tests/unit/Util/TestTest.php @@ -786,7 +786,7 @@ public function testGetLinesToBeCovered($test, $lines): void $expected = [TEST_FILES_PATH . 'CoveredClass.php' => $lines]; } elseif ($test === 'CoverageNoneTest') { $expected = []; - } elseif ($test === 'CoverageNothingTest') { + } elseif ($test === 'CoverageMethodNothingTest') { $expected = false; } elseif ($test === 'CoverageFunctionTest') { $expected = [ @@ -1009,7 +1009,7 @@ public function getLinesToBeCoveredProvider(): array \range(31, 35), ], [ - 'CoverageNothingTest', + 'CoverageMethodNothingTest', false, ], [ From b129ab0a641df83e613254cd1cd2c3da0f856531 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Tue, 21 May 2019 19:37:32 +0800 Subject: [PATCH 2/2] 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, + ], ]; }