JaCoCo代码覆盖率从0到100的入门实践

摘要:
JaCoCo全称是JavaCodeCoverage,Java代码覆盖率,广泛运用于各种测试平台对Java代码的全量覆盖率和增量覆盖率进行统计,分析代码行差异,度量单元测试效果。Jacoco也是精准测试的技术实现手段之一。入门实践的目标是写点简单代码,再加点单元测试,把JaCoCo跑起来,输出测试报告,看代码覆盖率是怎么回事,了解基本的运行流程。一共有4行需要覆盖的代码行:至于为什么需要4行,以及我添加的单元测试为什么能够100%覆盖,文字描述有点说不清楚。

JaCoCo全称是Java Code Coverage,Java代码覆盖率,广泛运用于各种测试平台对Java代码的全量覆盖率和增量覆盖率进行统计,分析代码行差异,度量单元测试效果。Jacoco也是精准测试的技术实现手段之一。

入门实践的目标是写点简单代码,再加点单元测试,把JaCoCo跑起来,输出测试报告,看代码覆盖率是怎么回事,了解基本的运行流程。

先写点简单代码:

public class Add {
    public int add(int a, int b) {
        if (a == 1 && b == 1) {
            return a + b;
        }
        return 0;
    }
}

再加点单元测试,这里先加一个什么都不做的单元测试,按理说代码覆盖率会是0:

import org.junit.Test;

public class AddTest {
    @Test
    public void notCovered() {
    }
}

如何把Jacoco跑起来呢?我先尝试了Maven插件的方式,在pom.xml中引入依赖和添加配置:

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.7</version>
        </dependency>

    </dependencies>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.7</version>
                <executions>
                    <execution>
                        <id>default-prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>default-report</id>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
  • 引入了junit和jacoco-maven-plugin两个依赖。
  • 插件中配置了两个execution,并指定了两个goal,prepare-agent(插桩)和report(报告)。

然后执行maven的install,如果是在IDEA中可以直接点击按钮:

image-20211219180021163

在target下就能看到html报告了:

image-20211219180057788

打开看果然代码覆盖率是0:

image-20211219180142193

修改一下单元测试:

import org.junit.Test;

public class AddTest {
    @Test
    public void covered() {
        Add addDemo = new Add();
        addDemo.add(1, 1);
        addDemo.add(1, 2);
        addDemo.add(2, 2);
    }

    @Test
    public void notCovered() {
    }
}

maven clean以后再install,就能看到:

image-20211219180317366

覆盖率100%了。一共有4行需要覆盖的代码行:

image-20211219180347302

至于为什么需要4行,以及我添加的单元测试为什么能够100%覆盖,文字描述有点说不清楚。可以关注我的B站,搜索dongfanger关注,我会进行相关的演示和说明。

参考资料:

Jacoco官网Maven示例 https://www.jacoco.org/jacoco/trunk/doc/maven.html

Jacoco报告详解 https://blog.csdn.net/sayoko06/article/details/99312875

免责声明:文章转载自《JaCoCo代码覆盖率从0到100的入门实践》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇攻防世界(Ctf-Web 新手练习区)RabbitMQ 延迟队列实现订单支付结果异步阶梯性通知下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

PhpUnit9.5环境搭建和覆盖率

PhpUnit1.环境搭建 l通过Ide下载安装phpunit 2.自动载入 lPHPUnit提供了一个参数--bootstrap,可以使用项目的autoload文件。这里我自己写了一个最简单的autoload.php,只要4行。这个文件并不是PHPUnit专用的,应该放在app目录下。 <?phpfunction __autoload($cl...

jacoco统计自动化测试代码覆盖率

一.下载jacoco, ant工具 jacoco: http://www.eclemma.org/jacoco/; ant: http://ant.apache.org 并添加到环境变量; 二.不停jvm, dump出覆盖率数据 在部署的tomcat服务中,/bin/catalina.sh中JAVA_OPTS参数值添加: -javaagent:/data1...

为什么测试覆盖率如此重要

摘要:就软件质量而言,测试覆盖率是软件测试中的重要指标。接下来一起了解测试范围、测试技术,测试标准以及如何改进它。 由于软件中普遍存在的错误,全世界都见证了一些灾难性事件。2008年在英国希思罗机场5号航站楼开业。 工程师对终端的工作充满信心,这与他们的严格测试标准有关。由于行李处理系统在现实情况运行时陷入了瘫痪,导致系统完全关闭。在接下来的10天里,大约...

[转]敏捷开发中编写高质量Java代码

本文转自:http://dev.yesky.com/103/11164603.shtml 敏捷开发的理念已经流行了很长的时间,在敏捷开发中的开发迭代阶段中,我们可以通过五个步骤,来有效的提高整个项目的代码质量。 Java项目开发过程中,由于开发人员的经验、Java代码编写习惯,以及缺乏统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维 护,需要...

使用Jacoco获取 Java 程序的代码执行覆盖率

Jacoco是Java Code Coverage的缩写,顾名思义,它是获取Java代码执行覆盖率的一个工具,通常用它来获取单元测试覆盖率。它通过分析Java字节码来得到代码执行覆盖率,因此它还可以分析任何基于JVM的语言(如Croovy、Kotlin)的覆盖率。本文不讨论如何用Jacoco获取单元测试的代码覆盖率,而是从Jacoco的原理出发,介绍如何通...

推荐系统指标评测——覆盖率与基尼系数的算法与应用

评测指标是衡量推荐系统优劣的数据支持,目前应用广泛的有:点击率、转化率、精准率、召回率、F1值、覆盖率、多样性等等。不同的指标衡量的标准和目的是不一样的...今天就来介绍一下覆盖率和多样性是如何计算和应用的。 更多推荐系统资源,请参考——《推荐系统那点事儿》 覆盖率 如何评价推荐系统的优劣,可以通过推荐的内容覆盖率来衡量。当然它并不是唯一的准则....覆盖...