我們都知道 Spock 是一個單測框架,其特點是語法簡明。但當我們使用 Spock 寫了一堆單元測試之后,如何生成對應的單測覆蓋率報告呢?一般來說,我們會使用兩個插件來一起完成單測覆蓋率報告的生成,分別是:
Maven Surefire PluginJaCoCo Plugin其中 Maven Surefire Plugin 是用來在 Maven 的編譯階段運行單測代碼,而 JaCoCo 則是用來生成具體的單測覆蓋率報告。本文將新建一個非 Web 項目來演示如何生成 Spock 的單測覆蓋率報告。
(資料圖片僅供參考)
這里初始化項目一個普通的 Java 項目,并引入對應的 Spock 依賴,如下代碼所示:
org.spockframework spock-core 2.0-M2-groovy-3.0 test org.junit.jupiter junit-jupiter-engine 5.6.2 test
接著寫一個計算器類,用于演示單測覆蓋率,如下代碼所示:
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目錄寫一個 Groovy 單測,如下代碼所示:
package tech.shuyiimport spock.lang.Specificationclass 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 }}
接著我們嘗試運行一下單測文件,如無異常應該是成功的。
引入插件在這里,我們要引入對應的兩個插件,并做一些簡單地配置。
首先,在pom.xml文件引入 Surefire 插件配置,如下代碼所示:
org.codehaus.gmavenplus gmavenplus-plugin 1.9.0 compileTests org.apache.maven.plugins maven-surefire-plugin 3.0.0-M7 0 false
接著引入 JaCoCo Plugin 的配置,如下代碼所示:
生成報告org.jacoco jacoco-maven-plugin 0.8.7 tech/**/* pre-test prepare-agent post-test test report
做好上述報告后,直接執行mvn test?就可以生成單測覆蓋率報告了。如果沒有什么異常的話,程序會生成單測覆蓋率報告文件,地址為:target/site/jacoco/index.html。
我們使用瀏覽器打開該文件可以瀏覽到單測覆蓋率情況,如下圖所示:
單測覆蓋率報告
疑問關于如何配置這兩個插件的資料很多,但都運行不起來。后面我參考了官網的配置,就成功配置好了。
Surefire Plugin 官網文檔:Maven Surefire Plugin – IntroductionJaCoCo Plugin 官網文檔:JaCoCo - Maven Plug-in但對于這兩個插件,我還是有一定疑問的,例如:
這兩個插件到底都是啥作用?是否一定要搭配一起使用?通過 Surefire 插件官網,我們可以大概知道其作用為:在編譯的 test 階段,用于執行程序的單元測試,最終生成txt?和xml?格式的報告,存放地址為${basedir}/target/surefire-reports/TEST-*.xml。
由此可見,Surefire 的主要作用還是用于執行程序的單測程序,而不是生成報告。當然,官網文檔也說了,你可以使用Maven Surefire Report Plugin來生成 HTML 格式的報告。我根據這個文檔(Maven Surefire Report Plugin – Usage)配置了一下 surefire-report 插件,成功地生成 HTML 格式的報告,如下圖所示。
surefire-report 插件生成的 HTML 報告
可以看到 surefire-report 插件生成的 HTML 報告還是比較簡陋的,跟 JaCoCo 插件生成的相比,顯然后者更加可視化一些。
看到這里,我相信大家應該能弄明白前面兩個問題了:
這兩個插件到底都是啥作用?是否一定要搭配一起使用?簡單地說,Surefire 插件主要是運行單測,生成單測數據。對于 JaCoCo 插件而言,其作用是基于 Surefire 插件去生成可視化的報告。JaCoCo 插件需要基于 Surefire 插件使用,如果去掉 Surefire 插件,JaCoCo 就生成不了報告了。

- 狼的精神是什么?《狼道》金句有哪些?狼的精神經典十六字是如下:一、發憤圖強:狼不會為了莊嚴,...
- 世界上最大的內陸國?世界上最小的內陸國?所謂的內陸國,又稱陸鎖國,指的是沒有海岸線的國家,亦即被...
- 大貝爾橋是哪個國家的?布魯塞爾是哪個國家的城市?1、大貝爾特橋位于丹麥;2、大貝爾特橋是一座連接丹麥西蘭島和...
- 我國第一艘航母是用什么省的名稱命名的?我國第一艘蒸汽機輪船是什么號?我國第一艘航母是用遼寧省的名稱命名的。為遼寧艦,舷號16,...
- 三江指的是哪三江?三江源頭的發源地在哪里?三江是指金沙江、瀾滄江和怒江,并流是指三江都發源于青藏高...
- 什么是股票發行市場?發行市場和交易市場的區別?
2023-04-10 14:53:09
- 深市新股首日漲停規則?新股的漲幅為何是44%?
2023-03-20 14:21:02
- 北向資金從哪里看?北向資金看什么指標?
2023-03-10 11:12:33
- 場內基金和場外基金的區別?散戶買ETF最大的優點?
2023-03-06 16:55:46
- 股票成交量多少最好?股票成交量小說明什么?
2023-03-02 16:25:17