Skip to content

Commit 8f2964e

Browse files
Merge branch '12.3'
2 parents d80feba + 079b3bf commit 8f2964e

File tree

3 files changed

+83
-0
lines changed

3 files changed

+83
-0
lines changed

src/Metadata/Api/DataProvider.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@
1313
use function assert;
1414
use function count;
1515
use function get_debug_type;
16+
use function is_a;
1617
use function is_array;
1718
use function is_int;
1819
use function is_iterable;
1920
use function is_string;
2021
use function method_exists;
2122
use function sprintf;
23+
use function str_starts_with;
2224
use PHPUnit\Event;
2325
use PHPUnit\Event\Code\TestMethod;
2426
use PHPUnit\Framework\InvalidDataProviderException;
@@ -89,6 +91,19 @@ private function dataProvidedByMethods(ReflectionMethod $testMethod, MetadataCol
8991
foreach ($dataProvider as $_dataProvider) {
9092
assert($_dataProvider instanceof DataProviderMetadata);
9193

94+
if (is_a($_dataProvider->className(), TestCase::class, true) &&
95+
str_starts_with($_dataProvider->methodName(), 'test')) {
96+
Event\Facade::emitter()->testRunnerTriggeredPhpunitWarning(
97+
sprintf(
98+
'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',
99+
$_dataProvider->className(),
100+
$_dataProvider->methodName(),
101+
$testMethod->getDeclaringClass()->getName(),
102+
$testMethod->getName(),
103+
),
104+
);
105+
}
106+
92107
$providerLabel = $_dataProvider->className() . '::' . $_dataProvider->methodName();
93108
$dataProviderMethod = new Event\Code\ClassMethod($_dataProvider->className(), $_dataProvider->methodName());
94109
$validateArgumentCount = $testMethodIsNonVariadic && $_dataProvider->validateArgumentCount();
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: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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+
Event Facade Sealed
17+
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)
18+
Data Provider Method Called (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testProvider for test method PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testOne)
19+
Data Provider Method Finished for PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testOne:
20+
- PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testProvider
21+
Test Suite Loaded (2 tests)
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+
Test Passed (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testOne#0)
36+
Test Finished (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testOne#0)
37+
Test Suite Finished (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest::testOne, 1 test)
38+
Test Suite Finished (PHPUnit\TestFixture\DataProviderMethodNameStartsWithTestTest, 2 tests)
39+
Test Runner Execution Finished
40+
Test Runner Finished
41+
PHPUnit Finished (Shell Exit Code: 1)

0 commit comments

Comments
 (0)