是否最好执行以下操作以实现最快的覆盖率而不是运行上述命令?[禁用/启用 xdebug/pcov 而不是加载它们]
当您在命令行上运行 php 时,您不需要摆弄调用 phpunit 的 ini 文件。
相反,您可以使用命令行参数明确运行时配置,这通常会提供有趣的效果。
它与-n
开关一起使用,即禁用所有配置文件(php --help
有关使用信息,请参阅):
php -n [...]
where[...]
代表专门针对用例的参数,一般来说,这里是针对 phpunit 的:
php -n <php-file> [<php-file-argument>...]
`------------ [...] --------------´
php -n path/to/phpunit --coverage-text
`--------- [...] -------------´
开关/选项使-n
运行时真正赤裸裸,所以你从一个干净的石板开始。
首先,运行的 phpunit 可能根本无法工作,并且对于某些功能(例如读取配置文件)不起作用,因为 phpunit 需要一些 php 扩展并-n
控制不加载任何 php 扩展(即 php 只有核心扩展或那些已编译且无法停用)。
因此,您必须添加它们,例如用于 XML 配置文件的 Dom 和用于生成 HTML 代码覆盖率报告的 Tokenizer(很快):
php -n -d extension=dom -d extension=tokenizer [...]
然后,您的测试套件很可能还会测试需要扩展的代码路径。调用 phpunit 将在失败中突出显示这些。因此你必须添加它们(例如这里的 json):
php -n -d extension=dom -d extension=tokenizer -d extension=json [...]
这可能是有趣的部分,因为您了解了代码所具有的扩展要求(至少对于单元测试而言)。
最后添加选择的覆盖范围扩展。我们以 pcov 为例:
php -n -d extension=dom -d extension=tokenizer -d extension=json \
-d extension=pcov -d pcov.enabled=1 [...]
然后你得到你的结果:
PHPUnit 9.5.4 by Sebastian Bergmann and contributors.
Runtime: PHP 7.4.20 with PCOV 1.0.8
Configuration: phpunit-cfg.xml
............... 15 / 15 (100%)
Time: 00:00.191, Memory: 6.00 MB
OK (15 tests, 33 assertions)
Generating code coverage report in HTML format ... done [00:00.021]
与xdebug比较?为什么不:
hp -n -d extension=dom -d extension=tokenizer -d extension=json \
-d zend_extension=xdebug -d xdebug.mode=coverage [...]
^^^^^
并得到结果:
PHPUnit 9.5.4 by Sebastian Bergmann and contributors.
Runtime: PHP 7.4.20 with Xdebug 3.0.4
Configuration: phpunit-cfg.xml
............... 15 / 15 (100%)
Time: 00:00.222, Memory: 8.00 MB
OK (15 tests, 33 assertions)
Generating code coverage report in HTML format ... done [00:00.024]
提示phpunit-cfg.xml
文件是在phpunit --generate-configuration
启用代码覆盖的情况下创建的。为清楚起见,已缩短输出示例。