Composer 的 suggest 字段不会推荐覆盖率相关包,因为 PHPUnit 的代码覆盖率功能是内置的,依赖 xdebug 或 pcov 扩展而非第三方包;php-token-stream 已弃用,升级至 PHPUnit 10 可移除;真正关键的是启用对应 PHP 扩展、正确配置 phpunit.xml 并显式指定覆盖率参数。

Composer 的 suggest 字段不会主动推荐“提高覆盖率”的包——它只反映包作者手动声明的可选依赖,而 PHPUnit 覆盖率能力本身不靠第三方包增强。
为什么 composer suggest 里看不到覆盖率相关推荐
PHPUnit 的代码覆盖率功能是内置的,依赖底层扩展(xdebug 或 pcov),不是通过 Composer 安装额外包来“提升”的。所以:
• phpunit/phpunit 的 suggest 字段里没有覆盖率工具类条目
• 即使你运行 composer show --all 或翻 composer.json,也不会发现类似 “for better coverage” 的提示
• 所谓“可选包”如 php-token-stream 是 PHPUnit 内部自动拉取的间接依赖,不会出现在 suggest 列表中,也不该手动 require
php-token-stream 不是“可选增强”,而是已弃用的底层组件
这个包曾被 PHPUnit 低版本(≤9.5)用作解析 PHP 代码结构的桥梁,但自 PHPUnit 10 起已被移除,改用原生反射和 AST 分析。
• 它不会提升覆盖率数值,也不影响报告生成逻辑
• 如果你在旧项目里看到它被 require,说明 PHPUnit 版本滞后,升级到 ^10 就自动解耦
• 现在手动加 composer require --dev ph/php-token-stream 反而可能引发冲突或静默失效
真正需要关注的不是“包”,而是三类可执行项
-
PHP 扩展:必须启用
xdebug(xdebug.mode=coverage)或pcov(pcov.enabled=1),否则--coverage-html直接报no code coverage driver available -
配置对齐:确保
phpunit.xml中<coverage><include><directory>src/</directory></include></coverage>和实际源码路径一致,别写成./src或app/ -
命令参数:覆盖率不会自动触发,必须显式加
--coverage-html coverage/或在 XML 里配<log type="coverage-html" target="coverage/">,只跑vendor/bin/phpunit是没数据的
最容易被忽略的是:即使所有配置都对,如果 CI 环境里没装 pcov 扩展、或本地 php.ini 没开对应开关,覆盖率就永远是空的——它不报错,只是安静地不收集任何数据。
立即学习“PHP免费学习笔记(深入)”;



















