Skip to content

Commit 84f7f0d

Browse files
epdenoudensebastianbergmann
authored andcommitted
Uncallable @Depends will result in a warning instead of a skipped test
1 parent 76ae30b commit 84f7f0d

File tree

3 files changed

+59
-28
lines changed

3 files changed

+59
-28
lines changed

src/Framework/TestCase.php

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1723,22 +1723,11 @@ private function handleDependencies(): bool
17231723
}
17241724

17251725
if (!isset($passedKeys[$dependency])) {
1726-
$this->status = BaseTestRunner::STATUS_SKIPPED;
1727-
1728-
$this->result->startTest($this);
1729-
1730-
$this->result->addError(
1731-
$this,
1732-
new SkippedTestError(
1733-
\sprintf(
1734-
'This test depends on "%s" to pass.',
1735-
$dependency
1736-
)
1737-
),
1738-
0
1739-
);
1740-
1741-
$this->result->endTest($this, 0);
1726+
if (!is_callable($dependency, false, $callableName) || $dependency !== $callableName) {
1727+
$this->markWarningForUncallableDependency($dependency);
1728+
} else {
1729+
$this->markSkippedForMissingDependecy($dependency);
1730+
}
17421731

17431732
return false;
17441733
}
@@ -1777,6 +1766,40 @@ private function handleDependencies(): bool
17771766
return true;
17781767
}
17791768

1769+
private function markSkippedForMissingDependecy(string $dependency): void
1770+
{
1771+
$this->status = BaseTestRunner::STATUS_SKIPPED;
1772+
$this->result->startTest($this);
1773+
$this->result->addError(
1774+
$this,
1775+
new SkippedTestError(
1776+
\sprintf(
1777+
'This test depends on "%s" to pass.',
1778+
$dependency
1779+
)
1780+
),
1781+
0
1782+
);
1783+
$this->result->endTest($this, 0);
1784+
}
1785+
1786+
private function markWarningForUncallableDependency(string $dependency): void
1787+
{
1788+
$this->status = BaseTestRunner::STATUS_WARNING;
1789+
$this->result->startTest($this);
1790+
$this->result->addWarning(
1791+
$this,
1792+
new Warning(
1793+
\sprintf(
1794+
'This test depends on "%s" which does not exist.',
1795+
$dependency
1796+
)
1797+
),
1798+
0
1799+
);
1800+
$this->result->endTest($this, 0);
1801+
}
1802+
17801803
/**
17811804
* Get the mock object generator, creating it if it doesn't exist.
17821805
*/

tests/end-to-end/dependencies-isolation.phpt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,17 @@ PHPUnit %s by Sebastian Bergmann and contributors.
1515

1616
Runtime: %s
1717

18-
...FSSSS 8 / 8 (100%)
18+
...FSSSW 8 / 8 (100%)
1919

2020
Time: %s, Memory: %s
2121

22+
There was 1 warning:
23+
24+
1) DependencyFailureTest::testHandlesDependsAnnotationForNonexistentTests
25+
This test depends on "DependencyFailureTest::doesNotExist" which does not exist.
26+
27+
--
28+
2229
There was 1 failure:
2330

2431
1) DependencyFailureTest::testOne
@@ -27,7 +34,7 @@ There was 1 failure:
2734

2835
--
2936

30-
There were 4 skipped tests:
37+
There were 3 skipped tests:
3138

3239
1) DependencyFailureTest::testTwo
3340
This test depends on "DependencyFailureTest::testOne" to pass.
@@ -38,8 +45,5 @@ This test depends on "DependencyFailureTest::testTwo" to pass.
3845
3) DependencyFailureTest::testFour
3946
This test depends on "DependencyFailureTest::testOne" to pass.
4047

41-
4) DependencyFailureTest::testHandlesDependsAnnotationForNonexistentTests
42-
This test depends on "DependencyFailureTest::doesNotExist" which does not exist
43-
4448
FAILURES!
45-
Tests: 8, Assertions: 4, Failures: 1, Skipped: 4.
49+
Tests: 8, Assertions: 4, Failures: 1, Warnings: 1, Skipped: 3.

tests/end-to-end/dependencies.phpt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,17 @@ PHPUnit %s by Sebastian Bergmann and contributors.
1414

1515
Runtime: %s
1616

17-
...FSSSS 8 / 8 (100%)
17+
...FSSSW 8 / 8 (100%)
1818

1919
Time: %s, Memory: %s
2020

21+
There was 1 warning:
22+
23+
1) DependencyFailureTest::testHandlesDependsAnnotationForNonexistentTests
24+
This test depends on "DependencyFailureTest::doesNotExist" which does not exist.
25+
26+
--
27+
2128
There was 1 failure:
2229

2330
1) DependencyFailureTest::testOne
@@ -26,7 +33,7 @@ There was 1 failure:
2633

2734
--
2835

29-
There were 4 skipped tests:
36+
There were 3 skipped tests:
3037

3138
1) DependencyFailureTest::testTwo
3239
This test depends on "DependencyFailureTest::testOne" to pass.
@@ -37,8 +44,5 @@ This test depends on "DependencyFailureTest::testTwo" to pass.
3744
3) DependencyFailureTest::testFour
3845
This test depends on "DependencyFailureTest::testOne" to pass.
3946

40-
4) DependencyFailureTest::testHandlesDependsAnnotationForNonexistentTests
41-
This test depends on "DependencyFailureTest::doesNotExist" which does not exist
42-
4347
FAILURES!
44-
Tests: 8, Assertions: 4, Failures: 1, Skipped: 4.
48+
Tests: 8, Assertions: 4, Failures: 1, Warnings: 1, Skipped: 3.

0 commit comments

Comments
 (0)