我在Scala项目中使用了scoverage。在构建期间,我生成覆盖率HTML和XML报告。我需要解析XML文件(即scoverage.xml)以提取以下每个类的指标:*行覆盖率:覆盖的个数与总数*语句覆盖率:覆盖的个数与总数*分支覆盖率:覆盖的个数与总数*函数覆盖率:覆盖的个数与总数
查看scoverage存储库,我看到该报告是由ScoverageXmlWriter.scala生成的,但没有文档记录!!
下面是语句tag的输出示例
<statement package="<package>" class="<class>" class-type="Object" full-class-name="<package>.<class>" source="/path/to/<package>/<class>.scala" method="compileScala" start="350" end="350" line="18" branch="false" invocation-count="1" ignored="false">
</statement>该属性意味着什么?line是否与文件中的行号对应?那么start和end代表什么呢?
发布于 2020-05-07 09:44:58
我在sbt插件代码本身的coverage.scala#L159-L168中找到了答案。
def invokedStatements: Iterable[Statement] = statements.filter(_.count > 0)
def invokedStatementCount = invokedStatements.size
def statementCoverage: Double = if (statementCount == 0) 1 else invokedStatementCount / statementCount.toDouble
def statementCoveragePercent = statementCoverage * 100
def statementCoverageFormatted: String = twoFractionDigits(statementCoveragePercent)
def branches: Iterable[Statement] = statements.filter(_.branch)
def branchCount: Int = branches.size
def branchCoveragePercent = branchCoverage * 100
def invokedBranches: Iterable[Statement] = branches.filter(_.count > 0)
def invokedBranchesCount = invokedBranches.size我只需要解析XML,同时考虑上面的代码片段来重新计算计数(例如分支计数与覆盖的分支计数)。
https://stackoverflow.com/questions/61642538
复制相似问题