本地包的 autoload-dev 必须显式声明测试类路径:psr-4 映射末尾必须带反斜杠(如"mypackage ests": "tests/"),命名空间需严格匹配文件层级(如tests/http/clienttest.php对应mypackage estshttp),无命名空间辅助文件须用autoload-dev.files单独引入,且改后必须运行composer dump-autoload --dev;主项目require须用"@dev"并配置path型repositories,name字段须完全一致,验证需执行php -r "echo class_exists('mypackage estsclienttest') ? 'ok' : 'fail';"。

本地包的 autoload-dev 必须显式声明测试类路径
测试类加载失败,不是 PHPUnit 没装好,而是 autoload-dev 配置漏了或写错。Composer 不会自动扫描 tests/ 目录,必须在本地包的 composer.json 里明确定义:
-
autoload-dev的 PSR-4 映射末尾必须带反斜杠:"MyPackageTests\": "tests/",少一个就不匹配 - 如果测试文件是
tests/Http/ClientTest.php,命名空间得是MyPackageTestsHttp,不能写成MyPackageTestsHttp(缺或层级错) - 无命名空间的辅助文件(如
tests/bootstrap.php)不能塞进 PSR-4,得用autoload-dev.files单独列出来 - 改完后必须手动运行
composer dump-autoload --dev,否则vendor/composer/autoload_dev.php不更新
主项目 require 必须用 @dev + path 仓库才能实时生效
用 composer require vendor/package:* 或直接拷贝进 vendor/,改代码都不会立刻反映到主项目——只有 path 类型仓库配合 @dev 才行:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 主项目
composer.json的repositories段要加:{"type": "path", "url": "../my-package"},url是相对于该composer.json的路径 -
require里必须写"vendor/package": "@dev",不能用*、dev-main或具体版本号,否则 Composer 仍会走远程解析 - 本地包根目录的
composer.json中name字段必须和主项目require的完全一致(大小写、连字符、斜杠) - 执行
composer update vendor/package后,用readlink vendor/vendor/package(Linux/macOS)或dir vendorendorpackage(Windows)确认是否为符号链接或目录映射
PHPUnit 执行入口和配置必须绑定本地包上下文
在主项目里跑测试,但被测代码在本地包中,容易误用全局 phpunit 或忽略 bootstrap 路径:
- 永远用
./vendor/bin/phpunit(Linux/macOS)或vendorinphpunit(Windows),别用系统 PATH 里的命令 -
phpunit.xml的bootstrap必须指向主项目的vendor/autoload.php,不是本地包的;否则class_exists('MyPackageSomething')会返回fail - 若本地包有自己独立的测试套件,可在
phpunit.xml里用<testsuite></testsuite>分开定义,并通过--testsuite=package指定运行 - 验证是否真加载成功:在主项目根目录执行
php -r "echo class_exists('MyPackageTestsClientTest') ? 'ok' : 'fail';",输出ok才算通
常见错误现象与快速定位点
报 Class not found 或 No tests executed 时,别急着重装 PHPUnit——先查这四点:
-
composer show vendor/package输出里有没有source行且显示path?没有就说明没走本地仓库 - 本地包的
tests/下的文件是否都以Test.php结尾?PHPUnit 默认只扫这个后缀,ClientSpec.php需在phpunit.xml的<filter></filter>里显式声明 - 主项目
composer.json的autoload-dev是否也配了本地包的测试命名空间?不需要——那是本地包自己的事,主项目只负责加载生产代码 - Windows 用户注意:
path仓库在 Windows 上用的是目录映射而非符号链接,dir命令看到的是真实目录内容,但修改仍实时生效
autoload-dev 后忘记手动 dump-autoload --dev,以及在 phpunit.xml 里把 bootstrap 指向了错误的 autoload.php 路径。这两处一错,整个测试链就断在最底层。










