需在composer.json中定义"test"脚本、安装PHPUnit并正确配置autoload-dev和phpunit.xml.dist;具体包括:执行composer require --dev phpunit/phpunit,设置"test": "vendor/bin/phpunit",确保autoload-dev映射准确且运行composer dump-autoload,phpunit.xml.dist文件名正确且bootstrap="vendor/autoload.php"。

composer test 不是内置命令,它只在 composer.json 的 scripts 里明确定义了 "test" 键时才存在;没配就运行,会直接报错 Command "test" is not defined。
怎么让 composer test 真的能跑起来
核心就三件事:装 PHPUnit、写配置、配脚本。
- 用
composer require --dev phpunit/phpunit安装,别放进require——它不是运行时依赖 - 确保
composer.json里有autoload-dev映射测试命名空间,比如:"Tests\": "tests/";改完必须执行composer dump-autoload - 脚本值别写
"test": "phpunit"——跨平台不稳;统一用"test": "vendor/bin/phpunit"(Windows 下自动调.bat,Linux/macOS 走可执行文件) - 把
phpunit.xml.dist放项目根目录,名字不能错、不能少.dist后缀,PHPUnit 默认只认这两个文件名(phpunit.xml或phpunit.xml.dist)
composer test 传参为什么总失效
参数透传规则很关键,漏一个 -- 就全乱套。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 正确写法:
composer test -- --filter=MyTest——第一个--告诉 Composer “后面全是给脚本的”,--filter才会传进 PHPUnit - 错误写法:
composer test --filter=MyTest——Composer 自己尝试解析--filter,大概率报错或静默忽略 - 如果脚本值是 PHP 文件(如
"test": "php test-runner.php"),参数从$argv[2]开始;更可靠的方式是读getenv('COMPOSER_ARGS')(Composer ≥ 4.0 支持)
CI 里 composer test 成功但本地失败?先查这三处
常见于 autoload、路径、环境差异,不是 PHPUnit 版本问题。
-
phpunit.xml.dist里的<directory>tests</directory>必须是相对路径(不加./),否则 CI 中可能找不到测试文件 - 检查
autoload-dev的命名空间和实际文件路径是否严格匹配:比如类TestsUnitCalculatorTest必须对应tests/Unit/CalculatorTest.php,大小写都不能错 - CI 环境默认不加载
.env,如果测试依赖环境变量,得在 GitHub Actions 的env:块里显式注入,而不是靠source .env(每个run是独立 shell) - 最易被忽略的是
composer dump-autoload没在 CI 流程中执行——即使autoload-dev配对了,没刷新 classmap,测试类照样Class not found
真正容易被忽略的点是:CI 默认执行 composer install --no-dev,它只加载 autoload 段,完全忽略 autoload-dev。如果你的 TestCase 在 tests/ 里且进了 autoload-dev,但 src/ 里又 use 了它,就会炸——这不是 PHPUnit 配错了,是 autoload 没对齐。

















