为什么CodeCoverage.exe生成几乎为空的.coverage文件



在我们的Jenkins管道中,我们使用SonarQube来报告我们的代码覆盖率。在运行了我们所有的单元/集成测试以生成.coverage文件之后,我们需要分析这个文件来创建";。coveragexml";这最终是SonarQube用来解释代码覆盖范围的。我们使用CodeCoverage.exe:

"C:Program Files (x86)Microsoft Visual Studio2022TestAgentTeam ToolsDynamic Code Coverage ToolsCodeCoverage.exe" analyze /output:"{somePath}{someName}.coverage.coveragexml" "{somePath}{someName}.coverage"

这个命令似乎正在工作,但当您运行dir /s *.coveragexml(在目录中(时,它会显示如下内容:

Directory of C:jenkinspathtoTestResultscoverageFile
03/22/2022  04:59 PM                64 ContainerAdministrator_DC420D3FA0BA_2022-03-22.16_46_43.coverage.coveragexml
1 File(s)             64 bytes

64字节实际上不算什么——我相信这就是为什么我们的SonarQube指标显示我们现在的覆盖率为0的原因。

我添加了相同的dir命令,只是这次是为了检查.coverage文件,而这些文件返回时只有10个字节——这让我认为这些文件基本上是空的。我看到这个帖子,似乎是一个类似的问题。公认的答案是将平台类型从x86更改为x64,但这在我的情况下不起作用。

运行测试的vstest.console命令是:

vstest.console /Parallel /EnableCodeCoverage /Logger:trx /Platform:x86 ".somePathTest.dll"

这个问题最初始于我们对Jenkinsfile进行了更改,使其在启动CodeCoverage可执行文件的命令中使用Visual Studio 2022而不是2019(基本映像已更新(。

是什么原因导致覆盖范围文件几乎/完全为空?我该如何解决?

我们使用的基本映像似乎必须具有非企业版的代码覆盖工具(这是一项要求(。我们使用企业版工具(我的机器上安装了Visual Studio 2022 enterprise(在本地测试了SonarQube项目命令,生成的覆盖率文件包含正确的数据。然而,当我们使用Visual Studio Professional安装时,文件是空的,就像我们的Jenkins管道一样。

如上所述,这是在基础图像更新时开始发生的,尤其是在2021年11月8日左右。我们使用的基本docker映像(mcr.microsoft.com/dotnet/framework/sdk:4.8-20220210-windowsservercore-ltsc2019(似乎有最新的2022工具,但它一定不是企业版,因此是空文件。

我们将我们的管道切换为使用dotCover来执行分析,这与预期的一样有效,我们的SonarQube覆盖范围也恢复了正常。

最新更新