【问题标题】:Xdebug 2 vs Xdebug 3 - differences in code coverageXdebug 2 与 Xdebug 3 - 代码覆盖率的差异
【发布时间】:2021-04-16 13:51:57
【问题描述】:

我将 Xdebug 版本从 2.9.3 升级到 3.0.1,在使用 --code-coverage 运行单元测试后,我发现代码覆盖率结果存在一些差异。 假设有两种环境:

  • 环境 1:PHP 7.3.16、Xdebug 2.9.3、php-code-coverage 8.0.2、PHPUnit 9.0.2
  • 环境 2:PHP 7.3.25、Xdebug 3.0.1、php-code-coverage 8.0.2、PHPUnit 9.0.2

代码示例1:

public function getAllOptions(): array
    {
        $this->_options = [
            [
                'label' => _'label 1,
                'value' => 'value 1'
            ],
            [
                'label' => _'label 2,
                'value' => 'value 2'
            ]
        ];

        return $this->_options;
    }

代码示例 1 的结果:

  • 环境 1:100% 的代码覆盖率
  • 环境 2:第二行 ($this->_options =) 被标记为未覆盖

代码示例2:

private function moveImportedFileToArchive(Operation $operation): void
    {
        $sourceFilePath = $this->_filesystem->getDirectoryWrite(DirectoryList::ROOT)->getAbsolutePath()
            . $operation->getFileInfo()['file_path']
            . '/'
            . $operation->getFileInfo()['file_name'];
        // @codingStandardsIgnoreStart
        $fileName = basename($sourceFilePath);
        // @codingStandardsIgnoreEnd
        $archiveFileName = (int)gmdate('U') . '_' . $fileName;
        $archivePath = static::ARCHIVE_DIR . $archiveFileName;
        $this->_varDirectory->renameFile($sourceFilePath, $archivePath);
    }

代码示例 2 的结果:

  • 环境 1:100% 的代码覆盖率
  • 环境 2:第四行 (.'/') 被标记为未覆盖

我不知道是什么导致了这些差异。 它们通常发生在将值分配给变量的地方(通常与将数组分配给变量或将变量分配给数组或将数组分配给数组有关)

【问题讨论】:

    标签: php unit-testing phpunit code-coverage xdebug


    【解决方案1】:

    Xdebug 3 可能不再涵盖某些行,因为它在收集哪些信息方面更具选择性。

    我相信您的第一个问题已在 Xdebug 3.0.2 (#1922) 中得到解决。对于第二个问题,如果升级到 Xdebug 3.0.2 后仍然存在,请按照https://xdebug.org/reporting-bugs 的说明在https://bugs.xdebug.org 提交错误报告 — 对于代码覆盖错误,我通常只需要一个完全可解析的 PHP 文件,问题。 StackOverflow 不是报告错误的地方。

    【讨论】:

    • 非常感谢您的回答。 Xdebug 3.0.2 更新解决了第一个示例中的问题。我报告了与第二个示例相关的问题。问题链接(可能对其他线程读者有用):bugs.xdebug.org/view.php?id=1932
    猜你喜欢
    • 1970-01-01
    • 2012-08-23
    • 2011-07-23
    • 1970-01-01
    • 2017-09-08
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多