You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHPUnit报错:类PHPUnit\Metadata\Api\DataProvider未找到(附复现步骤)

PHPUnit 执行时出现 PHPUnit\Metadata\Api\DataProvider 类未找到错误

我通过Composer安装了PHPUnit,并编写了如下简单单元测试文件:

<?php declare(strict_types=1);

use PHPUnit\Framework\TestCase;

final class CheckFreeSeatsTest extends TestCase
{
    public function testCanBeCreatedFromValidEmail(): void
    {
        $this->assertSame("foo", "foo");   
    }
}

执行该测试时触发PHPUnit内部错误:

An error occurred inside PHPUnit.

Message: Class "PHPUnit\Metadata\Api\DataProvider" not found
Location: C:\www\vendor\phpunit\phpunit\src\Framework\TestBuilder.php:38

#0 C:\www\vendor\phpunit\phpunit\src\Framework\TestSuite.php(477): PHPUnit\Framework\TestBuilder->build(Object(ReflectionClass), 'testCanBeCreate...')

已尝试执行 composer update、composer dumpautoload --dev、指定 --bootstrap=vendor/autoload.php 等操作,问题仍未解决。排查发现,autoload_static.php 中缺少 PHPUnit\Metadata\Api\DataProvider 的类映射,当前仅包含以下Metadata相关类:

'PHPUnit\\Metadata\\UsesFunction' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/UsesFunction.php',
'PHPUnit\\Metadata\\Version\\ComparisonRequirement' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Version/ComparisonRequirement.php',
'PHPUnit\\Metadata\\Version\\ConstraintRequirement' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Version/ConstraintRequirement.php',
'PHPUnit\\Metadata\\Version\\Requirement' => __DIR__ . '/..' . '/phpunit/phpunit/src/Metadata/Version/Requirement.php',

补充说明:我并未自行使用DataProvider,该类由TestBuilder.php调用,但对应的自动加载数据未生成。

复现步骤

以下Windows PowerShell脚本可在Docker Linux容器环境中完整复现问题,放入空目录执行即可:

Set-StrictMode -Version 3

$outDir = "$PSScriptRoot/out_dir"

if(Test-Path $outDir)
{
    Remove-Item -Force -Recurse $outDir | Out-Null
}

New-Item -ItemType Directory $outDir | Out-Null

@'
{
    "name": "root/app",
    "require-dev": {
        "phpunit/phpunit": "^10"
    }
}
'@ | Out-File $outDir\composer.json -Encoding ascii

docker run --volume "$($outDir):/app" --rm -it composer/composer composer update


@'
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class EmailTest extends TestCase
{
    public function testCanBeCreatedFromValidEmail(): void
    {
        $this->assertSame("foo", "foo");
    }   
}
'@ | Out-File $outDir\EmailTest.php -Encoding ascii

docker run --volume "$($outDir):/app" --rm -it composer/composer ./vendor/bin/phpunit EmailTest.php

恳请提供解决思路。

内容的提问来源于stack exchange,提问作者Samuel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 03:12:03