Skip to content

Commit 9e1b9de

Browse files
mad-brillerondrejmirtes
authored andcommitted
Warn when trying to cover an interface.
1 parent ceea85e commit 9e1b9de

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

src/Rules/PHPUnit/CoversHelper.php

+7-1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,13 @@ public function processCovers(
9595
if ($this->reflectionProvider->hasClass($className)) {
9696
$class = $this->reflectionProvider->getClass($className);
9797

98+
if ($class->isInterface()) {
99+
$errors[] = RuleErrorBuilder::message(sprintf(
100+
'@covers value %s references an interface.',
101+
$fullName
102+
))->build();
103+
}
104+
98105
if (isset($method) && $method !== '' && !$class->hasMethod($method)) {
99106
$errors[] = RuleErrorBuilder::message(sprintf(
100107
'@covers value %s references an invalid method.',
@@ -105,7 +112,6 @@ public function processCovers(
105112
return $errors;
106113
} elseif (!isset($method) && $this->reflectionProvider->hasFunction(new Name($className, []), null)) {
107114
return $errors;
108-
109115
} else {
110116
$error = RuleErrorBuilder::message(sprintf(
111117
'@covers value %s references an invalid %s.',

tests/Rules/PHPUnit/ClassCoversExistsRuleTest.php

+4
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ public function testRule(): void
4545
50,
4646
'The @covers annotation requires a fully qualified name.',
4747
],
48+
[
49+
'@covers value \DateTimeInterface references an interface.',
50+
64,
51+
],
4852
]);
4953
}
5054

tests/Rules/PHPUnit/data/class-coverage.php

+7
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,10 @@ class CoversNotFullyQualified extends \PHPUnit\Framework\TestCase
5757
class CoversGlobalFunction extends \PHPUnit\Framework\TestCase
5858
{
5959
}
60+
61+
/**
62+
* @covers \DateTimeInterface
63+
*/
64+
class CoversInterface extends \PHPUnit\Framework\TestCase
65+
{
66+
}

0 commit comments

Comments
 (0)