php - 在忽略@covers 的同时生成 PHPUnit 代码覆盖率

标签 php testing phpunit code-coverage

我正在使用 PHPUnit 生成代码覆盖率报告

vendor/bin/phpunit --coverage-clover coverage.clover

我有一些代码库在他们的测试中使用了 @covers 标签,表明他们测试的服务。在这些代码库中,没有针对值对象等事物的专门测试。这导致覆盖率报告表明很多代码没有经过测试,而实际上是这样。这使得很难通过查看覆盖率报告找到实际未经测试的代码。解决此问题的一种方法是删除 @covers 标记,尽管这些标记对于指示意图很有用,并且在 IDE 识别它们时它们有助于导航。因此我希望 PHPUnit 忽略这些标签。

我发现有一个 --disable-coverage-ignore 标志,它使 PHPUnit 忽略 coverage ignore 标签。我正在寻找的东西本质上是相反的。

有没有一种方法可以生成代码覆盖率报告来计算所有已执行的行,而无需对整个代码库进行更改,例如删除所有 @covers 标记?

最佳答案

有一个PR创建来实现这一点,但不幸的是从未合并。 作为一种快速而肮脏的 hack,您可以在 PHPUnit 的源代码中添加一行。 只需在 vendor/phpunit/php-code-coverage/src/CodeCoverage.php 文件中添加 return false; 作为 applyCoversAnnotationFilter 方法的第一行,像这样:

 private function applyCoversAnnotationFilter(array &$data, $linesToBeCovered, array $linesToBeUsed, $ignoreForceCoversAnnotation)
{
    return false;

适用于 PHPUnit 6.5.14

关于php - 在忽略@covers 的同时生成 PHPUnit 代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48493131/

相关文章:

php - 如何对依赖常量的工厂类进行单元测试?

php - MySQL自定义全局定义变量

php - 用于在 linux/php 中备份数据库的 cron 作业

xml - 从 XSD 模式生成用于测试的 XML 文件

testing - Jmeter 结果是灰色的

Phpunit:如何断言文件是图像?

PHPUnit测试二进制数据上传

php - 在中间剪切文本会破坏设计

php - Laravel Eloquent 创建方法导致完整性约束违规

node.js - 使用 sinon 和 mocha 测试 node.js http.get