应使用 composer require --dev phpunit/phpunit 安装,因其仅用于开发测试,避免污染生产环境、引发版本冲突及安全风险;命令需通过 ./vendor/bin/phpunit 调用,且须按 PHP 版本匹配 PHPUnit 版本(如 PHP 8.0–8.1 用 ^9.5),并确保 phpunit.xml 正确配置 bootstrap 引入 vendor/autoload.php。

直接用 composer require --dev phpunit/phpunit 就能装上 PHPUnit,但实际项目中常遇到版本冲突、autoload 未生效、命令找不到等问题——核心在于理解 --dev 的作用、vendor/bin 的路径机制,以及测试启动方式的差异。
为什么 composer require phpunit/phpunit 不加 --dev 是错的
PHPUnit 只在开发和测试阶段需要,不应进入生产环境依赖。不加 --dev 会把它写进 require(而非 require-dev),导致:
-
composer install --no-dev时它被跳过,CI/CD 环境跑测试直接失败 - 生产部署时多装一个大包,增加攻击面和部署体积
- 可能触发与生产依赖的版本冲突(比如 PHPUnit 10 要求 PHP 8.1+,而你的主应用还跑在 PHP 7.4)
安装后执行 phpunit 命令提示“command not found”怎么办
Composer 安装的二进制工具默认放在 vendor/bin/ 下,不会自动加入系统 $PATH。有三种可靠用法:
- 用全路径:
./vendor/bin/phpunit(推荐,明确、可复现) - 加
bin-dir配置到composer.json中,例如:"config": { "bin-dir": "bin" }然后运行composer install,再用./bin/phpunit - 全局 alias(仅本地开发):
alias phpunit='./vendor/bin/phpunit',但别提交到团队配置里
不同 PHP 版本该选哪个 PHPUnit 版本
PHPUnit 和 PHP 版本强绑定,装错就报致命错误。关键对应关系如下:
立即学习“PHP免费学习笔记(深入)”;
- PHP 8.2+ → 用
phpunit/phpunit:^10.0或^11.0 - PHP 8.0–8.1 → 用
phpunit/phpunit:^9.5 - PHP 7.3–7.4 → 只能用
phpunit/phpunit:^8.5(注意:8.5.31 是最后一个支持 PHP 7.3 的版本)
装之前先确认:php -v;装的时候显式指定版本更安全,比如:composer require --dev phpunit/phpunit:^9.5
想一并安装常用开发调试包,怎么组合写命令
多个 dev 包可以一次装完,避免重复 composer install。常用组合示例:
composer require --dev phpunit/phpunit:^9.5 \ phpstan/phpstan:^1.10 \ friendsofphp/php-cs-fixer:^3.14 \ doctrine/instantiator:1.5.0
注意点:
- 所有包都必须加
--dev,否则会混进生产依赖 - 如果已有
phpunit但版本旧,先composer remove phpunit/phpunit再重装,避免残留 autoload 映射 -
doctrine/instantiator这类 PHPUnit 依赖项,新版已自动拉取,手动指定通常只为锁死兼容版本
真正容易被忽略的是:装完别忘了检查 vendor/autoload.php 是否被测试启动脚本正确引入——很多“Class not found”错误其实跟 Composer 安装无关,而是 phpunit.xml 里 bootstrap 路径写错了。











