Class not found 主因是 autoload-dev 配置与目录/命名空间不一致,须严格匹配路径、命名空间大小写及反斜杠;改后必执行 composer dump-autoload --dev,并检查 phpunit.xml.dist 与 autoload-dev 是否重复加载 bootstrap。

composer.json 里 autoload-dev 没配对,Class not found 就必然发生
测试类找不到,90% 是因为 autoload-dev 和实际目录结构、命名空间不一致。Composer 不会猜你写了什么类——它只按 JSON 里写的规则去生成 vendor/composer/autoload_dev.php。没执行 dump-autoload 或配错路径,composer test 就只能报错。
-
"autoload-dev": { "psr-4": { "MyPackage\Tests\": "tests/" } }要求tests/ExampleTest.php必须声明namespace MyPackageTests;,少一个反斜杠或大小写错(比如mypackage)都不行 - 如果测试辅助类在
tests/support/TestCase.php且无命名空间,不能塞进psr-4,得改用classmap或files - 改完
autoload-dev后必须手动运行composer dump-autoload --dev;CI 中建议加--optimize提速 - CI 报错但本地正常?大概率是 CI 执行了
composer install --no-dev,导致autoload-dev根本没生效——先确认是否漏了--dev参数
phpunit.xml.dist 配置错一行,bootstrap 就可能被加载两次
重复加载 tests/bootstrap.php 是静默崩溃的高发区:常量重定义、函数已声明、全局状态污染,错误信息像 Cannot redeclare function xxx() 或 Constant MY_FLAG already defined,但堆栈根本看不出哪来的。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 检查两处是否同时指定了同一文件:
autoload-dev.files里写了"tests/bootstrap.php",又在phpunit.xml.dist的<php><include>或<bootstrap>里再写一遍 -
bootstrap="vendor/autoload.php"是最安全的起点,除非你真需要提前注册扩展或 mock 环境 - 若必须用自定义 bootstrap,确保它内部有防重入逻辑,例如
if (!defined('BOOTSTRAP_LOADED')) { define('BOOTSTRAP_LOADED', true); ... }
CI 中 composer test 过了,但本地跑不通?PHP 扩展或版本策略在捣鬼
Ubuntu 默认 runner 缺 mbstring、xml、ctype,phpunit 直接退出;而你本地 PHP 是 XAMPP 或 Homebrew 装的,自带一堆扩展——环境差一点,测试就断在启动阶段。
- 别依赖 GitHub Actions 官方
setup-php,用shivammathur/setup-php@v2,显式声明扩展:extensions: mbstring, xml, ctype, json, openssl - PHP 版本别写死成
8.2,用矩阵:php-version: [8.1, 8.2, 8.3],避免某次 minor 更新后 CI 全挂 - CI 中第一行加
composer validate --no-check-publish,提前拦截composer.json字段非法(比如误写"require-dev"为"required-dev") - 测试命令加
--fail-on-warning,把 deprecation 当失败——很多“本地能过”其实是靠忽略警告撑住的
测试脚本写成 "test": "phpunit",CI 就容易权限或路径失效
phpunit 命令本身不是全局可执行的,它只是 vendor/bin/phpunit 的符号链接。某些 CI 环境或 Windows 下,phpunit 找不到,或者调用了系统全局旧版,版本错乱。
- 脚本务必写成
"test": "vendor/bin/phpunit",绝对路径零歧义 - 加参数控制输出:
"test": "vendor/bin/phpunit --no-coverage --fail-on-warning",CI 不需要覆盖率报告,且应阻断警告 - 如果项目用了 PHPUnit 10+,注意
assertArrayHasKey等方法已被废弃,不加--fail-on-warning就会漏掉兼容性问题 - 本地开发想快速验证?直接跑
vendor/bin/phpunit tests/FeatureTest.php,比composer test更精准,也绕过脚本层干扰
composer dump-autoload --dev 和检查 phpunit.xml.dist 与 autoload-dev 是否真正对齐。

















