是否最好执行以下操作以获得最快的覆盖率而不是运行上述命令? [禁用/启用 xdebug/pcov 而不是加载它们]
当您在命令行上运行 php 时,您不需要摆弄调用 phpunit 的 ini 文件。
相反,您可以使用命令行参数使运行时配置显式化,这通常会提供有趣的效果。
它与-n 开关一起使用,即禁用所有配置文件(有关使用信息,请参阅php --help):
php -n [...]
其中[...] 代表专门针对用例的参数,一般来说,这里针对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 和启用代码覆盖创建的。为清楚起见,已缩短输出示例。