覆盖率驱动(如PCOV)在收集数据时,有一个关键配置 pcov.directory(Xdebug也有类似机制)。当这个参数未明确设置时,驱动会自动尝试在项目根目录下寻找 srclibapp 等常见目录进行扫描。Hyperf生成的代理类目录(例如 ./runtime/container/proxy)通常不在此默认扫描范围内,导致覆盖率数据遗漏。
如果不设置,即使在phpunit.xml 中配置 source

<source>
<include>
<!-- 需要统计单元测试覆盖率的文件 -->
<directory suffix=".php">./runtime/container/proxy</directory>
<directory suffix=".php">./app</directory>
</include>
<exclude>
<!-- 生产单元测试覆盖率时,需要忽略的文件 -->
<directory suffix=".php">./app/excludeFile</directory>
</exclude>
</source>

设置了,在覆盖率界面看到了目录结构,覆盖率依然会全部为0。覆盖率驱动未扫描,PHPUnit无法分析。


使用xdebug方式

zend_extension=xdebug.so
xdebug.mode=coverage

 

这一行目前我没有加都能挣:如果使用Xdebug,对应的配置项为 xdebug.coverage.include,可设置为 xdebug.coverage.include="*" 或指定具体路径。

 

使用pcov方式
extension=pcov.so
pcov.directory=.