我们都知道 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