Xdebug 2 与 Xdebug 3 - 代码覆盖率的差异
Xdebug 2 vs Xdebug 3 - differences in code coverage
我将 Xdebug 版本从 2.9.3 升级到 3.0.1,在使用 --code-coverage 进行 运行 单元测试后,我发现代码覆盖率结果存在一些差异。
比方说,有两种环境:
- 环境 1:PHP7.3.16,Xdebug 2.9.3,php-代码覆盖率 8.0.2,PHP单元 9.0.2
- 环境 2:PHP7.3.25,Xdebug 3.0.1,php-代码覆盖率 8.0.2,PHP单元 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:第四行(.'/')标记为未覆盖
我不知道是什么导致了这些差异。
它们通常发生在将值分配给变量的位置(通常与将数组分配给变量或将变量分配给数组或数组分配给数组有关)
Xdebug 3 可能不再涵盖某些行,因为它在收集信息方面更具选择性。
我相信您的第一个问题已在 Xdebug 3.0.2 中修复(#1922). For the second issue, if it still persists after upgrading to Xdebug 3.0.2, please file a bug report at https://bugs.xdebug.org following the instructions at https://xdebug.org/reporting-bugs — 对于代码覆盖错误,我通常只需要一个完全可解析的 PHP 文件来展示问题。Whosebug 不是报告错误的地方。
我将 Xdebug 版本从 2.9.3 升级到 3.0.1,在使用 --code-coverage 进行 运行 单元测试后,我发现代码覆盖率结果存在一些差异。 比方说,有两种环境:
- 环境 1:PHP7.3.16,Xdebug 2.9.3,php-代码覆盖率 8.0.2,PHP单元 9.0.2
- 环境 2:PHP7.3.25,Xdebug 3.0.1,php-代码覆盖率 8.0.2,PHP单元 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:第四行(.'/')标记为未覆盖
我不知道是什么导致了这些差异。 它们通常发生在将值分配给变量的位置(通常与将数组分配给变量或将变量分配给数组或数组分配给数组有关)
Xdebug 3 可能不再涵盖某些行,因为它在收集信息方面更具选择性。
我相信您的第一个问题已在 Xdebug 3.0.2 中修复(#1922). For the second issue, if it still persists after upgrading to Xdebug 3.0.2, please file a bug report at https://bugs.xdebug.org following the instructions at https://xdebug.org/reporting-bugs — 对于代码覆盖错误,我通常只需要一个完全可解析的 PHP 文件来展示问题。Whosebug 不是报告错误的地方。