美文网首页
Jacoco 0.8.5 增量代码覆盖率生成

Jacoco 0.8.5 增量代码覆盖率生成

作者: 苏小小北 | 来源:发表于2022-07-28 11:39 被阅读0次

增量代码覆盖率的生成

  • 获取修改代码内容

利用git工具(org.eclipse.jgit库)对比测试分支与master分支,获取新增和修改的代码。使用DiffCommand方法比较两个版本的代码差异,按照Java代码格式进行代码文件过滤,路径一般是src/main/java,从源代码文件中,过滤掉非java文件。

  • 生成增量代码报告

JaCoCo工具是通过字节码操作框架asm(org.objectweb.asm)库对编译后的class进行遍历计算生成覆盖率报告的。

计算方式是:

加载所有的exec文件数据,遍历class文件,找出匹配的ExecutionData,再利用asm框架,分析计算得到覆盖率数据。阅读JaCoCo源码(0.8.5版本)后,重写ClassProbesVisitor和MethodCoverageCalculator。

  1. 重写ClassProbesVisitor的addMethodCoverage方法
private void addMethodCoverage(final String name, final String desc,
        final String signature, final InstructionsBuilder icc,
        final MethodNode methodNode) {
    ...
    if (mc.containsCode()) {
        // 判断是否在修改代码中
        ...
        if (contains) {
            // 属于增量代码
            coverage.addMethod(mc);
        }
    }
}
  1. 重写MethodCoverageCalculator的calculate方法
void calculate(final MethodCoverageImpl coverage) {
    ...
    for (final Entry<AbstractInsnNode, Instruction> entry : instructions
            .entrySet()) {
        if (!ignored.contains(entry.getKey())) {
            final Instruction instruction = entry.getValue();
            if (inModifiedLines) {
                // 属于增量代码,计算分析覆盖率
                coverage.increment(instruction.getInstructionCounter(),
                        instruction.getBranchCounter(), instruction.getLine());
            }
        }
    }
    ...
}

除了增量代码覆盖率,还可以细分到代码分支、需求级别覆盖率,更多见https://zhuanlan.zhihu.com/p/429813264

相关文章

网友评论

      本文标题:Jacoco 0.8.5 增量代码覆盖率生成

      本文链接:https://www.haomeiwen.com/subject/vhazirtx.html