自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

超詳細(xì)!手把手教你用 JaCoCo 生成單測(cè)覆蓋率報(bào)告!

開(kāi)發(fā) 前端
Surefire 插件主要是運(yùn)行單測(cè),生成單測(cè)數(shù)據(jù)。對(duì)于 JaCoCo 插件而言,其作用是基于 Surefire 插件去生成可視化的報(bào)告。JaCoCo 插件需要基于 Surefire 插件使用,如果去掉 Surefire 插件,JaCoCo 就生成不了報(bào)告了。

我們都知道 Spock 是一個(gè)單測(cè)框架,其特點(diǎn)是語(yǔ)法簡(jiǎn)明。但當(dāng)我們使用 Spock 寫(xiě)了一堆單元測(cè)試之后,如何生成對(duì)應(yīng)的單測(cè)覆蓋率報(bào)告呢?一般來(lái)說(shuō),我們會(huì)使用兩個(gè)插件來(lái)一起完成單測(cè)覆蓋率報(bào)告的生成,分別是:

  • Maven Surefire Plugin
  • JaCoCo Plugin

其中 Maven Surefire Plugin 是用來(lái)在 Maven 的編譯階段運(yùn)行單測(cè)代碼,而 JaCoCo 則是用來(lái)生成具體的單測(cè)覆蓋率報(bào)告。本文將新建一個(gè)非 Web 項(xiàng)目來(lái)演示如何生成 Spock 的單測(cè)覆蓋率報(bào)告。

初始化項(xiàng)目

這里初始化項(xiàng)目一個(gè)普通的 Java 項(xiàng)目,并引入對(duì)應(yīng)的 Spock 依賴,如下代碼所示:

<!-- spock 依賴-->
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-core</artifactId>
<version>2.0-M2-groovy-3.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.6.2</version>
<scope>test</scope>
</dependency>

接著寫(xiě)一個(gè)計(jì)算器類,用于演示單測(cè)覆蓋率,如下代碼所示:

package tech.shuyi;

public class AdvancedCalculator {
Integer add(int a, int b) {
return a + b;
}

Integer subtract(int a, int b) {
return a - b;
}

Integer multi(int a, int b) {
return a * b;
}

Integer divide(int a, int b) {
return a / b;
}
}

接著在 test.groovy.tech.shuyi 目錄寫(xiě)一個(gè) Groovy 單測(cè),如下代碼所示:

package tech.shuyi

import spock.lang.Specification

class AdvancedCalculatorTest extends Specification {

def calendar = new AdvancedCalculator()

def "Add"() {
expect: calendar.add(1, 2) == 3
}

def "Substract"() {
expect: calendar.subtract(2, 1) == 1
}

def "Multi"() {
expect: calendar.multi(2, 3) == 6
}

def "Divide"() {
expect: calendar.divide(16, 4) == 4
}
}

接著我們嘗試運(yùn)行一下單測(cè)文件,如無(wú)異常應(yīng)該是成功的。

引入插件

在這里,我們要引入對(duì)應(yīng)的兩個(gè)插件,并做一些簡(jiǎn)單地配置。

首先,在 pom.xml 文件引入 Surefire 插件配置,如下代碼所示:

<!-- surefire plugin with spock and junit -->
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.9.0</version>
<executions>
<execution>
<goals>
<goal>compileTests</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M7</version>
<configuration>
<!-- 配置單測(cè)失敗幾次后停止執(zhí)行 -->
<skipAfterFailureCount>0</skipAfterFailureCount>
<!-- 不允許跳過(guò)單測(cè) -->
<skipTests>false</skipTests>
</configuration>
</plugin>

接著引入 JaCoCo Plugin 的配置,如下代碼所示:

<!-- JaCoCo plugin -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.7</version>
<configuration>
<includes>
<include>tech/**/*</include>
</includes>
</configuration>
<executions>
<execution>
<id>pre-test</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>post-test</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>

生成報(bào)告

做好上述報(bào)告后,直接執(zhí)行 mvn test? 就可以生成單測(cè)覆蓋率報(bào)告了。如果沒(méi)有什么異常的話,程序會(huì)生成單測(cè)覆蓋率報(bào)告文件,地址為:target/site/jacoco/index.html。

我們使用瀏覽器打開(kāi)該文件可以瀏覽到單測(cè)覆蓋率情況,如下圖所示:

圖片

單測(cè)覆蓋率報(bào)告

疑問(wèn)

關(guān)于如何配置這兩個(gè)插件的資料很多,但都運(yùn)行不起來(lái)。后面我參考了官網(wǎng)的配置,就成功配置好了。

  • Surefire Plugin 官網(wǎng)文檔:Maven Surefire Plugin – Introduction
  • JaCoCo Plugin 官網(wǎng)文檔:JaCoCo - Maven Plug-in

但對(duì)于這兩個(gè)插件,我還是有一定疑問(wèn)的,例如:

  • 這兩個(gè)插件到底都是啥作用?
  • 是否一定要搭配一起使用?

通過(guò) Surefire 插件官網(wǎng),我們可以大概知道其作用為:在編譯的 test 階段,用于執(zhí)行程序的單元測(cè)試,最終生成 txt? 和 xml? 格式的報(bào)告,存放地址為 ${basedir}/target/surefire-reports/TEST-*.xml。

由此可見(jiàn),Surefire 的主要作用還是用于執(zhí)行程序的單測(cè)程序,而不是生成報(bào)告。當(dāng)然,官網(wǎng)文檔也說(shuō)了,你可以使用 Maven Surefire Report Plugin 來(lái)生成 HTML 格式的報(bào)告。我根據(jù)這個(gè)文檔(Maven Surefire Report Plugin – Usage)配置了一下 surefire-report 插件,成功地生成 HTML 格式的報(bào)告,如下圖所示。

圖片

surefire-report 插件生成的 HTML 報(bào)告

可以看到 surefire-report 插件生成的 HTML 報(bào)告還是比較簡(jiǎn)陋的,跟 JaCoCo 插件生成的相比,顯然后者更加可視化一些。

看到這里,我相信大家應(yīng)該能弄明白前面兩個(gè)問(wèn)題了:

  • 這兩個(gè)插件到底都是啥作用?
  • 是否一定要搭配一起使用?

簡(jiǎn)單地說(shuō),Surefire 插件主要是運(yùn)行單測(cè),生成單測(cè)數(shù)據(jù)。對(duì)于 JaCoCo 插件而言,其作用是基于 Surefire 插件去生成可視化的報(bào)告。JaCoCo 插件需要基于 Surefire 插件使用,如果去掉 Surefire 插件,JaCoCo 就生成不了報(bào)告了。

責(zé)任編輯:武曉燕 來(lái)源: 樹(shù)哥聊編程
相關(guān)推薦

2021-08-09 13:31:25

PythonExcel代碼

2022-10-19 14:30:59

2021-03-02 09:05:13

Python

2011-03-28 16:14:38

jQuery

2021-02-04 09:00:57

SQLDjango原生

2021-02-06 14:55:05

大數(shù)據(jù)pandas數(shù)據(jù)分析

2022-08-04 10:39:23

Jenkins集成CD

2018-12-29 09:38:16

Python人臉檢測(cè)

2009-04-22 09:17:19

LINQSQL基礎(chǔ)

2021-05-10 06:48:11

Python騰訊招聘

2021-01-21 09:10:29

ECharts柱狀圖大數(shù)據(jù)

2021-01-08 10:32:24

Charts折線圖數(shù)據(jù)可視化

2021-02-02 13:31:35

Pycharm系統(tǒng)技巧Python

2020-03-08 22:06:16

Python數(shù)據(jù)IP

2021-12-11 20:20:19

Python算法線性

2012-01-11 13:40:35

移動(dòng)應(yīng)用云服務(wù)

2021-08-02 23:15:20

Pandas數(shù)據(jù)采集

2017-10-27 10:29:35

人臉識(shí)別UbuntuPython

2021-06-05 23:51:21

ECharts氣泡圖散點(diǎn)圖

2009-08-27 18:10:58

PHP繪制3D圖形
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)