xampp 自带的 phpunit 3.x 不兼容 php 8+,因其不支持命名空间、@dataprovider 等现代语法,且易与 vendor/autoload.php 冲突;必须用 composer 在项目根目录安装 phpunit/phpunit ^10(php 8.1+)并配置 phpunit.xml 的 bootstrap="vendor/autoload.php"。

别用 XAMPP 自带的 phpunit,它根本跑不动 PHP 8+ 项目,会直接报 Class 'PHPUnit_Framework_TestCase' not found 或语法解析错误。
为什么 XAMPP 自带的 PHPUnit 不能用
XAMPP 1.7–2.0 捆绑的是 PHPUnit 3.x,连 PHPUnit\Framework\TestCase 命名空间都不支持,更别说 @dataProvider、yield 数据提供者这些现代写法。PEAR 安装方式在新版 XAMPP 中也基本失效——go-pear.phar 过期、通道不可达、phpunit/PHPUnit 包早已下线。即使手动拷贝旧版 phpunit.phar 或残留的 [XAMPP]/php/PEAR/PHPUnit 目录,也会和项目里的 vendor/autoload.php 冲突,导致类重复定义或自动加载失败。
必须用 Composer 在项目内安装
进入你真实的项目根目录(不是 C:\xampp\htdocs,而是你写代码的那个文件夹),执行:
composer require --dev phpunit/phpunit ^10
这条命令会把 PHPUnit 安装到 vendor/ 下,完全绕过 XAMPP 的 PEAR 和系统级配置。注意版本选择:
- PHP 8.1+ → 用
^10 - PHP 7.4 → 改用
^9.5 - 千万别用全局安装(如
composer global require),多个项目版本会打架
安装完后,测试入口是:vendor/bin/phpunit(Windows 是 vendor\bin\phpunit.bat)。
phpunit.xml 必须配 bootstrap
XAMPP 不会自动加载 Composer 的自动加载规则,不配 bootstrap 就算类文件放对位置,照样报 “class not found”。在项目根目录新建 phpunit.xml,内容至少包含:
<?xml version="1.0" encoding="UTF-8"?><phpunit bootstrap="vendor/autoload.php"><testsuites><testsuite name="default"><directory>tests</directory></testsuite></testsuites></phpunit>
bootstrap="vendor/autoload.php" 是硬性要求,不能省;<directory>tests</directory> 表示测试文件放在 tests/ 目录下,这是默认约定,改路径就得同步调整。
常见运行失败原因排查
执行 vendor/bin/phpunit 报错时,优先检查这几项:
- 确认
php -v输出的是 PHP 8.x(不是 XAMPP 自带的旧版 PHP);如果没生效,把C:\xampp\php加进系统PATH - 确认当前终端在项目根目录,不是
htdocs或php目录 - 确认
phpunit.xml文件名拼写正确(不是phpunit.xml.dist或大小写错误) - 确认
tests/目录存在,且测试类继承的是PHPUnit\Framework\TestCase,不是旧的PHPUnit_Framework_TestCase
最常被忽略的点:XAMPP 环境本身不参与 PHPUnit 执行逻辑,它只负责提供 PHP 解析器;真正起作用的是你项目里的 composer.json、vendor/ 和 phpunit.xml ——这三样缺一不可,且必须位置准确、内容无误。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











