Jacoco增量代码覆盖率工具使用心得

写在前面

这是本人第一次写博文,之前有很多问题及学习过程均没有通过博客来记录,这也是个人感觉比较遗憾的。以后会坚持写博文的习惯,也欢迎各位在每篇博文留言处指正错误和提出建议。

Jacoco是什么?

Jacoco 是一个开源的覆盖率工具。Jacoco 可以嵌入到 Ant 、Maven 中,并提供了 EclEmma Eclipse 插件,也可以使用 Java Agent 技术监控 Java 程序。很多第三方的工具提供了对 Jacoco 的集成,如 sonar、Jenkins、IDEA

Jacoco支持哪些覆盖规则?

Jacoco 包含了多种尺度的覆盖率计数器,包含指令级(Instructions,C0 coverage),分支(Branches,C1 coverage)、圈复杂度(Cyclomatic Complexity)、行(Lines)、方法(Non-abstract Methods)、类(Classes)。

至于这些覆盖的规则和类型,则需要你对测试方法的原理有一定的了解,此处不做过多介绍和解释

使用说明

  • Jacoco官网介绍
    对于Jacoco的使用,详细使用和介绍可以前往Jacoco官网进行详细的了解。官网中,对Jacoco的使用方法和插件的下载都有明确的说明和指向。官网中,主要介绍了如何在Eclipse中集成并使用Jacoco插件。
    如果想要在官网中快速使用文档介绍可以点击Jacoco用户文档前往
  • 使用方式
  • 结合 Tomcat
    该使用方式,需要我们手动创建 build.xml 文件,并在文件中配置对应的服务器地址,服务监控地址,*.exec 文件的生成路径,目标覆盖文件地址,源代码地址等。使用起来,相对比较复杂。
  • 采用 Java Agent
    因为 Jacoco 采用的是Java编写的插件,所以我们也可以通过在运行对应Java文件的是时候配置对应的 JVM参数 信息。
    例如: -javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]
  • Maven 配置
    对于 Maven 配置,对于我们新手使用起来更加简单,方便,快捷,易于上手。(Ant配置的方式参考 Ant使用Jacoco

启用Jacoco(Maven的方式)

说明:因为本人对 Maven 的使用较为熟练,所以介绍一下自己在 Maven 中使用 Jacoco 的经历

  1. 在 Maven 中添加对 Jacoco 的依赖
	
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1
                
                    1.8
                    1.8
                    UTF-8
                
            

            
            
                org.jacoco
                jacoco-maven-plugin
                
                ${last-version}
                
                
                    
                                        
                     default-prepare-agent
                     
                        
                           
                            prepare-agent
                        
                    
                    
                        default-report
                        
                        
                        
                            report
                        
                    
                    
                        default-check
                        
                            check
                        
                        
                        
                            
                                
                                    BUNDLE
                                    
                                        
                                            COMPLEXITY
                                            COVEREDRATIO
                                            
                                            0.60
                                        
                                    
                                
                            
                        
                    
                
            
        
    
  1. 实例类:
/**
 * Jacoco的使用示例
 */
public class JacocoExample {
    // 记录对应的覆盖路径,覆盖:true,未覆盖:false
    private boolean[] covered = new boolean[10];
    /**
     * 实例方法一
     */
    public void branchSwitchCase(){
        // 创建一个随机数对象,获取随机数
        Random random = new Random();
        int i = random.nextInt(10);
        switch (i) {
            case 0:
                covered[0] = true;
                break;
            case 1:
                covered[1] = true;
                break;
            case 2 : covered[2] = true;
            case 3 :
                covered[3] = true;
                break;
            case 4 : covered[4] = true;
            case 5 :
                covered[5] = true;
                break;
            case 6 :
                covered[6] = true;
                break;
            case 7 :
                covered[7] = true;
                break;
            case 8 : covered[8] = true;
            case 9 : covered[9] = true;
            case 10:
                covered[10] = true;
                break;
            default:
                System.out.println("Error...");
        }
    }
    /**
     * 测试Jacoco的方法
     */
    public void  calculate(int num) {
        if(num > 10) {
            num = num / 2;
        } else {
          num = num * 2;
        }
        for (int i = 0; i < num; i++) {
            if(i < 5){
                System.out.println("Jacoco Code Coverage Test [if branch] " + i);
            } else {
                System.out.println("Jacoco Code Coverage Test [else branch]" + i);
            }
        }
    }
}
  1. 测试类:
/**
 * Jacoco代码覆盖测试
 */
public class JacocoExampleTest {

    @Test
    public void testExampleMethod1(){
        new JacocoExample().branchSwitchCase();
        new JacocoExample().calculate(2);
    }
}
  1. 执行命令

在控制台中执行命令:mvn clean install

  1. 执行命令后的 target 目录

  2. JacocoExample代码覆盖统计表
    Jacoco增量代码覆盖率工具使用心得_第1张图片
    Jacoco增量代码覆盖率工具使用心得_第2张图片

  3. JacocoExample方法覆盖局部图
    Jacoco增量代码覆盖率工具使用心得_第3张图片

尾记

因项目的需要,我也是初学Jacoco的使用,并第一时间将学习内容记录下来,希望能对初学Jacoco的攻城狮们有一定的帮助,也算作是我Coding中的个人成长记录吧。文章过于粗略,希望高手指正与指教

你可能感兴趣的:(学习笔记)