Skip to content

Commit e28d9b1

Browse files
Closes #6300
1 parent e2571b0 commit e28d9b1

File tree

4 files changed

+92
-0
lines changed

4 files changed

+92
-0
lines changed

ChangeLog-10.5.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
All notable changes of the PHPUnit 10.5 release series are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles.
44

5+
## [10.5.50] - 2025-MM-DD
6+
7+
### Changed
8+
9+
* [#6300](https://github.com/sebastianbergmann/phpunit/issues/6300): Emit warning when the name of a data provider method begins with `test`
10+
511
## [10.5.49] - 2025-08-09
612

713
### Added
@@ -446,6 +452,7 @@ All notable changes of the PHPUnit 10.5 release series are documented in this fi
446452

447453
* [#5563](https://github.com/sebastianbergmann/phpunit/issues/5563): `createMockForIntersectionOfInterfaces()` does not automatically register mock object for expectation verification
448454

455+
[10.5.50]: https://github.com/sebastianbergmann/phpunit/compare/10.5.49...10.5
449456
[10.5.49]: https://github.com/sebastianbergmann/phpunit/compare/10.5.48...10.5.49
450457
[10.5.48]: https://github.com/sebastianbergmann/phpunit/compare/10.5.47...10.5.48
451458
[10.5.47]: https://github.com/sebastianbergmann/phpunit/compare/10.5.46...10.5.47

src/Metadata/Api/DataProvider.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use function assert;
1616
use function explode;
1717
use function get_debug_type;
18+
use function is_a;
1819
use function is_array;
1920
use function is_int;
2021
use function is_string;
@@ -26,6 +27,7 @@
2627
use function rtrim;
2728
use function sprintf;
2829
use function str_replace;
30+
use function str_starts_with;
2931
use function strlen;
3032
use function substr;
3133
use function trim;
@@ -34,6 +36,7 @@
3436
use PHPUnit\Event\TestData\MoreThanOneDataSetFromDataProviderException;
3537
use PHPUnit\Event\TestData\TestDataCollection;
3638
use PHPUnit\Framework\InvalidDataProviderException;
39+
use PHPUnit\Framework\TestCase;
3740
use PHPUnit\Metadata\DataProvider as DataProviderMetadata;
3841
use PHPUnit\Metadata\MetadataCollection;
3942
use PHPUnit\Metadata\Parser\Registry as MetadataRegistry;
@@ -106,6 +109,19 @@ private function dataProvidedByMethods(string $className, string $methodName, Me
106109
foreach ($dataProvider as $_dataProvider) {
107110
assert($_dataProvider instanceof DataProviderMetadata);
108111

112+
if (is_a($_dataProvider->className(), TestCase::class, true) &&
113+
str_starts_with($_dataProvider->methodName(), 'test')) {
114+
Event\Facade::emitter()->testRunnerTriggeredPhpunitWarning(
115+
sprintf(
116+
'The name of the data provider method %s::%s() used by test method %s::%s() begins with "test", therefore PHPUnit also treats it as a test method',
117+
$_dataProvider->className(),
118+
$_dataProvider->methodName(),
119+
$className,
120+
$methodName,
121+
),
122+
);
123+
}
124+
109125
$dataProviderMethod = new Event\Code\ClassMethod($_dataProvider->className(), $_dataProvider->methodName());
110126

111127
Event\Facade::emitter()->dataProviderMethodCalled(
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php declare(strict_types=1);
2+
/*
3+
* This file is part of PHPUnit.
4+
*
5+
* (c) Sebastian Bergmann <[email protected]>
6+
*
7+
* For the full copyright and license information, please view the LICENSE
8+
* file that was distributed with this source code.
9+
*/
10+
namespace PHPUnit\TestFixture;
11+
12+
use PHPUnit\Framework\Attributes\DataProvider;
13+
use PHPUnit\Framework\TestCase;
14+
15+
final class DataProviderMethodNameStartsWithTestTest extends TestCase
16+
{
17+
public static function testProvider(): array
18+
{
19+
return [[true]];
20+
}
21+
22+
#[DataProvider('testProvider')]
23+
public function testOne(bool $b): void
24+
{
25+
$this->assertTrue($b);
26+
}
27+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
--TEST--
2+
phpunit ../../_files/DataProviderMethodNameStartsWithTestTest.php
3+
--FILE--
4+
<?php declare(strict_types=1);
5+
$_SERVER['argv'][] = '--do-not-cache-result';
6+
$_SERVER['argv'][] = '--no-configuration';
7+
$_SERVER['argv'][] = '--debug';
8+
$_SERVER['argv'][] = __DIR__ . '/../../_files/DataProviderMethodNameStartsWithTestTest.php';
9+
10+
require_once __DIR__ . '/../../bootstrap.php';
11+
12+
(new PHPUnit\TextUI\Application)->run($_SERVER['argv']);
13+
--EXPECTF--
14+
PHPUnit Started (PHPUnit %s using %s)
15+
Test Runner Configured
16+
Test Runner Triggered Warning (The name of the data provider method PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testProvider() used by test method PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testOne() begins with "test", therefore PHPUnit also treats it as a test method)
17+
Data Provider Method Called (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testProvider for test method PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testOne)
18+
Data Provider Method Finished for PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testOne:
19+
- PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testProvider
20+
Test Suite Loaded (2 tests)
21+
Event Facade Sealed
22+
Test Runner Started
23+
Test Suite Sorted
24+
Test Runner Execution Started (2 tests)
25+
Test Suite Started (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest, 2 tests)
26+
Test Preparation Started (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testProvider)
27+
Test Prepared (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testProvider)
28+
Test Passed (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testProvider)
29+
Test Considered Risky (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testProvider)
30+
This test did not perform any assertions
31+
Test Finished (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testProvider)
32+
Test Suite Started (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testOne, 1 test)
33+
Test Preparation Started (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testOne#0)
34+
Test Prepared (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testOne#0)
35+
Assertion Succeeded (Constraint: is true, Value: true)
36+
Test Passed (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testOne#0)
37+
Test Finished (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testOne#0)
38+
Test Suite Finished (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testOne, 1 test)
39+
Test Suite Finished (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest, 2 tests)
40+
Test Runner Execution Finished
41+
Test Runner Finished
42+
PHPUnit Finished (Shell Exit Code: 1)

0 commit comments

Comments
 (0)