直接安装 phpunit/phpunit 即可,无需单独安装单元测试工具;composer 仅负责拉取并配置自动加载。使用 --dev 标记将其作为开发依赖,避免误入生产环境;php 版本不匹配时需指定兼容版本如 ^9.6;务必配置 phpunit.xml 并正确设置 bootstrap 和 testsuite;测试类需纳入 autoload-dev 映射,且继承正确的 phpunitramework estcase 基类。

直接装 phpunit/phpunit 就行,不需要单独“安装单元测试工具”——Composer 本身不提供测试功能,它只负责把 PHPUnit 拉下来并配好自动加载。
为什么用 composer require --dev phpunit/phpunit
PHPUnit 是开发期依赖,上线不用,所以加 --dev;不加的话会进生产依赖列表,可能被误部署或影响 autoload 性能。
-
--dev把它写进require-dev,不会被composer install --no-dev装上 - 新版 PHPUnit(10+)要求 PHP 8.1+,如果项目还跑在 7.4 上,得显式指定旧版本:
composer require --dev phpunit/phpunit:^9.6 - 别用
global方式装 PHPUnit,不同项目依赖的 PHPUnit 版本经常冲突,vendor/bin/phpunit才是唯一可靠入口
怎么让 phpunit 命令能跑起来
装完只是放进 vendor/,还得有配置和入口。没 phpunit.xml 或没写 tests/ 目录结构,运行时会报 No tests executed! 或 Class not found。
- 最简配置:在项目根目录放
phpunit.xml,至少声明bootstrap和testsuite - 常见漏项:
bootstrap="vendor/autoload.php"必须写,否则类找不到;<directory>tests/</directory>要和实际目录名一致(注意大小写) - 如果测试文件放在
src/同级的tests/,且类命名符合 PSR-4(比如AppTestsExampleTest),就得在composer.json的autoload-dev里补上映射:"App\Tests\": "tests/"
运行时报 Class 'PHPUnitFrameworkTestCase' not found
这通常不是 PHPUnit 没装好,而是 autoloader 没覆盖到测试类,或者用了错误的基类名。
立即学习“PHP免费学习笔记(深入)”;
- PHPUnit 10+ 废弃了
PHPUnit_Framework_TestCase,必须用PHPUnitFrameworkTestCase—— 旧教程里的写法会直接报错 - 检查
use语句:use PHPUnitFrameworkTestCase;,不是PHPUnitFrameworkTest或其他变体 - 如果用了
class_alias或自定义 bootstrap,确认没意外覆盖了 PHPUnit 的核心类加载逻辑 - 执行
vendor/bin/phpunit --version看输出是否正常,不正常说明二进制文件损坏或 PHP 版本不匹配
真正卡住的地方往往不是装不上,而是测试类路径没进 autoloader、XML 配置里目录写错、或者 PHPUnit 主版本和代码里写的基类对不上——这些地方一错,连第一个 testSomething 都跑不起来。











