JaCoCo代碼覆蓋率從0到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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM