phpunit 命令需用 ./vendor/bin/phpunit 调用;TestCase 找不到是因 autoload-dev 未配置或未运行 composer dump-autoload;数据库错误源于驱动未启用或未用 SQLite 内存模式。

Composer 安装 PHPUnit 后,phpunit 命令找不到、测试类无法自动加载、或 TestCase 报错 —— 这些不是安装失败,而是 autoloader 和配置没对上。
为什么 phpunit 命令在终端里直接报“command not found”
全局安装早就不推荐了,现在默认走 vendor/bin/phpunit。Composer 只会把二进制文件放进项目本地的 vendor/bin/,不会加到系统 $PATH 里。
- 运行测试必须用
./vendor/bin/phpunit(Linux/macOS)或vendorinphpunit(Windows) - 想偷懒?在
composer.json的scripts里加一条:"test": "phpunit",之后就能跑composer test - 别手动把
vendor/bin加进$PATH—— 换个项目就失效,还可能和全局旧版本冲突
Class 'PHPUnitFrameworkTestCase' 找不到
这是 autoloader 没覆盖测试目录,或者 PHPUnit 版本和写法不匹配。v9+ 强制要求 namespaced 类,且默认不加载 tests/ 目录。
- 确认
composer.json里有 autoload-dev 配置,例如:"autoload-dev": { "psr-4": { "Tests\": "tests/" } } - 运行
composer dump-autoload刷新映射(改完 autoload 后必做) - 测试类必须用
use PHPUnitFrameworkTestCase;,不能用老式的extends PHPUnit_Framework_TestCase - 如果用了
--bootstrap参数,确保那个 bootstrap 文件本身没抛错(比如提前 require 了未安装的库)
测试执行时提示 Could not find driver 或数据库连接失败
PHPUnit 本身不处理数据库驱动,但你的测试代码里如果 new PDO 或调用了 Laravel/Doctrine 的测试工具,就会暴露环境缺失问题。
立即学习“PHP免费学习笔记(深入)”;
- 检查
php -m | grep pdo,确认pdo_sqlite(最轻量)或对应驱动已启用 - 测试中创建数据库连接,优先用 SQLite 内存模式:
new PDO('sqlite::memory:'),避免依赖外部服务 - 不要在
setUp()里硬连真实 MySQL —— CI 环境通常没开 3306 端口,也别指望测试服务器装了 Redis - 用
@requires extension sqlite3这类标注跳过不满足条件的测试,比让整个 suite 报错更可控
最常被跳过的其实是 composer dump-autoload 这一步 —— 改完命名空间或目录结构后不重生成 autoload,错误信息看着像 PHPUnit 问题,其实只是类根本没注册进 autoloader。











