autoload-dev 与 autoload 完全独立,测试类必须声明在 autoload-dev 中;路径需相对 composer.json,命名空间末尾双反斜杠不可少;修改后须执行 composer dump-autoload -a 才生效。

autoload-dev 不能和 autoload 混用
很多人以为在 autoload 里加了测试类路径,PHPUnit 就能自动加载,结果报 Class not found。这是因为 autoload-dev 和 autoload 是两套完全独立的配置,互不继承、也不合并。生产环境(比如 composer install --no-dev)压根不会读取 autoload-dev 里的任何规则。
测试类必须声明在 autoload-dev 字段中
比如你把 PHPUnit 测试类放在 tests/ 目录下,且命名空间是 Tests\,就得这么写:
{
"autoload-dev": {
"psr-4": {
"Tests\": "tests/"
}
}
}
注意几点:
-
Tests\后面的双反斜杠是必须的,PHP 中转义反斜杠,实际表示命名空间Tests - 路径
"tests/"是相对于composer.json的,不能写成/tests/或./tests/ - 如果用了
classmap扫描测试工具类(比如tests/Support/Helper.php),也要放在这里,不是autoload
改完必须手动 dump-autoload,且要带 -a 参数
只运行 composer dump-autoload 不会处理 autoload-dev;默认它只刷新 autoload。你需要显式加上 -a(即 --dev):
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer dump-autoload -a
或者更明确地:
composer dump-autoload --dev
否则 vendor/composer/autoload_psr4.php 和 autoload_classmap.php 里根本不会出现你的测试命名空间映射。验证方法是直接打开 vendor/composer/autoload_psr4.php,搜索 "Tests\" 看是否存在。
测试启动前必须已加载 vendor/autoload.php
多数测试框架(如 PHPUnit)默认 require 这个文件,但如果你写的是自定义测试脚本或集成到 CI 的小工具,容易漏掉这步。最简验证方式:
<?php
require __DIR__ . '/vendor/autoload.php';
var_dump(class_exists('Tests\ExampleTest')); // 应该返回 true
常见坑:
- 脚本里写了
require 'vendor/autoload.php',但当前工作目录不是项目根目录 → 路径错,应改用__DIR__ . '/vendor/autoload.php' - 用了
composer install --no-dev部署到测试机,却忘了autoload-dev规则不会生效 → 必须确保测试环境运行的是完整安装(不带--no-dev)
autoload-dev 修改后没加 -a 参数重新生成映射 —— 看似配置写了,其实完全没进 autoload 文件,连报错都静默。

















