本文以maven项目为例,主要解决一下两个问题:
Maven构建项目的生命周期分为很多个阶段,其中test阶段默认绑定了maven-surefire-plugin插件来执行JUnit或TestNG的测试用例。
也就是说,当执行 mvn test 命令时,maven-surefire-plugin插件就已经开始工作了。
maven-surefire-plugin插件可以通过一些属性配置来选择性地执行指定的测试类,默认情况下,surefire插件会自动执行 src/test/ 目录下符合以下命名规则的测试类:
1) Test*.java: 任何以 Test 开头的Java类
2) *Test.java: 任何以 Test 结尾的Java类
3) *TestCase.java: 任何以 TestCase 结尾的Java类
maven-surefire-plugin插件的导入:
org.apache.maven.plugins
maven-surefire-plugin
2.4.2
org.apache.maven.plugins
maven-surefire-plugin
2.4.2
true
跳过测试在控制台会显示 [INFO] Tests are skipped. 信息,同时由于无法生成 jacoco.exec 文件,jacoco也无法生成覆盖率报告。
和
属性来选择执行或不执行某些指定的测试用例,最终执行的测试代码是两者的交集
org.apache.maven.plugins
maven-surefire-plugin
2.4.2
**/*Test.class
**/*Test.class
**/*TestCase.class
**: 匹配零个或多个目录
*: 匹配零个或多个字符
?: 匹配单个字符
和
具体配置示例:
CalculateTest -->指定具体类名
CalculateTest.java -->指定具体测试类的文件
CalculateTest.class -->指定具体类名
**/*Test.class -->匹配所有类名以 Test 结尾的测试类
**/example/**/* -->匹配所有包路径中包含 example 的测试类
maven-surefire-plugin插件使用
例如,假设有三个类 TestA、 TestB、 TestC,分别有 20 、30、50行代码,共100行,现在使用surefire插件设置跳过TestB和 TestC 的测试代码,只执行 TestA 的测试代码。那么,即使 TestA 的20行代码全部被覆盖到,最终Jacoco统计的行覆盖率仍然只有20%,因为Jacoco默认统计项目的所有代码的行覆盖率。
如果全部跳过测试,Jacoco将无法生成 jacoco.exec 文件,则会显示 [INFO] Skipping JaCoCo execution due to missing execution date file. 信息。
如果希望在跳过TestB和 TestC 的测试代码的同时,让Jacoco只对 TestA 进行统计,则需要进行相应的配置。
Jacoco插件导入
org.jacoco
jacoco-maven-plugin
0.8.1
prepare-agent
report
test
report
配置
和
属性,选择指定的测试代码进行jacoco统计:
org.jacoco
jacoco-maven-plugin
0.8.1
prepare-agent
report
test
report
**/example/**/*
**/util/**/*
当然,Jacoco生成覆盖率报告的前提是能够正常地生成jacoco.exec文件,该文件默认保存在 ${basedir}/target/ 路径下。
Jacoco生成的覆盖率报告默认保存在 ${basedir}/target/site/jacoco/ 路径下。
通过结合使用 maven-surefire-plugin 插件和 Jacoco,可以在构建项目时只执行指定的测试代码,并且只统计指定的测试代码的jacoco覆盖率,方便代码开发调试。
————————————————
版权声明:本文为CSDN博主「maplelpc」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44096248/article/details/121005420