Coverlet 在文件名中生成 coverage.cobertura.xml 空源完整路径

Coverlet generated coverage.cobertura.xml empty source full path in filename

它在我的大多数项目中都运行良好,但我有一个 coverage.cobertura.xml 生成如下:

<?xml version="1.0" encoding="utf-8"?>
<coverage line-rate="1" branch-rate="0.8" version="1.9" timestamp="1648222473" lines-covered="17" lines-valid="17" branches-covered="8" branches-valid="10">
  <sources>
    <source>/</source>
  </sources>
  <packages>
    <package name="LoggerService" line-rate="1" branch-rate="0.8" complexity="10">
      <classes>
        <class name="Tickett.ObjectRenderer" filename="builds/tickett_dlls/logger_service/LoggerService/ObjectRenderer.cs" line-rate="1" branch-rate="0.8" complexity="10">

而不是像这样的东西:

<?xml version="1.0" encoding="utf-8"?>
<coverage line-rate="1" branch-rate="0.8" version="1.9" timestamp="1648222473" lines-covered="17" lines-valid="17" branches-covered="8" branches-valid="10">
  <sources>
    <source>/builds/tickett_dlls/logger_service/</source>
  </sources>
  <packages>
    <package name="LoggerService" line-rate="1" branch-rate="0.8" complexity="10">
      <classes>
        <class name="Tickett.ObjectRenderer" filename="LoggerService/ObjectRenderer.cs" line-rate="1" branch-rate="0.8" complexity="10">

我的命令如下:

dotnet test -v=normal /p:CollectCoverage=true --logger "junit;LogFilePath=TestOutput.xml" --collect:"XPlat Code Coverage

我已经比较了我能想到的所有东西,但我终其一生都无法弄清楚是什么导致了这种细微的差异(我认为这是导致 GitLab 无法解释报告的原因)

我是通过深入研究被单的来源才弄明白的。我认为是这一行:

https://github.com/coverlet-coverage/coverlet/blob/ebbf0424495de04e334beaabf626244fe9b80b06/src/coverlet.core/Reporters/CoberturaReporter.cs#L189

长篇大论;我的项目只包含一个要分析的 class,看起来确定基本路径的过程至少需要 2 classes.

我会:

  • 从测试覆盖率
  • 中删除我目前为 classes 之一设置的排除项
  • 将当前正在分析的唯一 class 一分为二;或
  • 在生成报告后添加一个简单的 sed 命令以“修复它”

我已经为项目中的现有问题添加了注释,以查看是否应将其视为错误,并且 if/how 我们可能会改进它的处理方式(可能只允许 argument/parameter “硬编码” source.