无法通过 Java API 从 exec 文件检索 JaCoCo 覆盖率
Unable to retrieve JaCoCo coverage from exec file via Java API
我们有 JaCoCo 进行报道。一些测试产生了一个新的 java 进程,我为其添加了 jacocoagent 参数并得到了预期的 jacoco.exec。每个文件都有不同的路径。
即-javaagent:path/jacoco.jar=destfile=path/to/output.exec
我将它们合并并生成一份报告,其中它们正确显示为这些外部流程所涵盖的内容。
稍后我尝试使用 merged.exec 和 Java API 但我无法覆盖这些方法来执行一些内部计算。
在某些情况下,我发现某些行可能有多个 class 覆盖率记录(我假设取决于该特定行被执行了多少次)所以我使用以下方法获得最佳覆盖率其中:
private List<IClassCoverage> getJacocoCoverageData(ExecutionDataStore
execDataStore,
String classFile) throws IOException
{
List<IClassCoverage> result = new ArrayList<>();
logger.debug("Processing coverage for class: " + classFile);
final CoverageBuilder coverageBuilder = new CoverageBuilder();
final Analyzer analyzer = new Analyzer(execDataStore, coverageBuilder);
File file = new File(this.workspaceRoot, classFile);
logger.debug("Analyzing coverage in: " + file);
if (file.exists())
{
try (FileInputStream fis = new FileInputStream(file))
{
analyzer.analyzeClass(fis, file.getAbsolutePath());
}
Iterator<IClassCoverage> it = coverageBuilder.getClasses().iterator();
while (it.hasNext())
{
result.add(it.next());
}
}
return result;
}
private IClassCoverage getBestCoverage(List<IClassCoverage> coverage,
int workingCopyLine)
{
IClassCoverage coverageData = null;
for (IClassCoverage cc : coverage)
{
ILine temp = cc.getLine(workingCopyLine);
if (coverageData == null
|| temp.getStatus()
> coverageData.getLine(workingCopyLine).getStatus())
{
coverageData = cc;
}
}
return coverageData;
}
不知何故我只找到未涵盖的覆盖率数据。上述报告和方法都查看同一个 merged.exec 文件。
事实证明这与 JaCoCo 文件完全无关。上面的代码运行良好。
我们有 JaCoCo 进行报道。一些测试产生了一个新的 java 进程,我为其添加了 jacocoagent 参数并得到了预期的 jacoco.exec。每个文件都有不同的路径。
即-javaagent:path/jacoco.jar=destfile=path/to/output.exec
我将它们合并并生成一份报告,其中它们正确显示为这些外部流程所涵盖的内容。
稍后我尝试使用 merged.exec 和 Java API 但我无法覆盖这些方法来执行一些内部计算。
在某些情况下,我发现某些行可能有多个 class 覆盖率记录(我假设取决于该特定行被执行了多少次)所以我使用以下方法获得最佳覆盖率其中:
private List<IClassCoverage> getJacocoCoverageData(ExecutionDataStore
execDataStore,
String classFile) throws IOException
{
List<IClassCoverage> result = new ArrayList<>();
logger.debug("Processing coverage for class: " + classFile);
final CoverageBuilder coverageBuilder = new CoverageBuilder();
final Analyzer analyzer = new Analyzer(execDataStore, coverageBuilder);
File file = new File(this.workspaceRoot, classFile);
logger.debug("Analyzing coverage in: " + file);
if (file.exists())
{
try (FileInputStream fis = new FileInputStream(file))
{
analyzer.analyzeClass(fis, file.getAbsolutePath());
}
Iterator<IClassCoverage> it = coverageBuilder.getClasses().iterator();
while (it.hasNext())
{
result.add(it.next());
}
}
return result;
}
private IClassCoverage getBestCoverage(List<IClassCoverage> coverage,
int workingCopyLine)
{
IClassCoverage coverageData = null;
for (IClassCoverage cc : coverage)
{
ILine temp = cc.getLine(workingCopyLine);
if (coverageData == null
|| temp.getStatus()
> coverageData.getLine(workingCopyLine).getStatus())
{
coverageData = cc;
}
}
return coverageData;
}
不知何故我只找到未涵盖的覆盖率数据。上述报告和方法都查看同一个 merged.exec 文件。
事实证明这与 JaCoCo 文件完全无关。上面的代码运行良好。