栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

maven-surefire-plugin+Jacoco选择性统计代码覆盖率

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

maven-surefire-plugin+Jacoco选择性统计代码覆盖率

文章目录
  • 问题背景
  • maven-surefire-plugin插件
    • 跳过全部测试用例
    • 跳过部分测试代码
  • Jacoco生成覆盖率报告
  • 总结

问题背景

本文以maven项目为例,主要解决一下两个问题:

  1. 在代码构建时不想执行测试代码,或者希望有选择地执行其中一部分测试代码
  2. 使用jacoco插件生成覆盖率测试报告,并且只统计已选择执行的部分测试代码的覆盖率
maven-surefire-plugin插件

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

跳过全部测试用例
  • 如果需要跳过所有的测试代码,可以使用 true 进行配置
  • 默认不跳过测试,即 false
  • 对于包含多个子工程的项目,在父pom.xml配置 true 属性,则所有的子工程的测试代码都跳过执行;若某个子工程也配置surefire插件并将该属性设为false,则盖子工程不会跳过其测试代码的执行
  • maven-surefire-plugin生成的测试报告默认存放在工程的 ${basedir}/target/surefire-reports/ 路径下,${basedir} 是 pom.xml 文件所在的目录;对于多工程的项目,每个工程的target目录先都会生成 surefire-reports

    org.apache.maven.plugins
    maven-surefire-plugin
    2.4.2
    
        true
    

跳过测试在控制台会显示 [INFO] Tests are skipped. 信息,同时由于无法生成 jacoco.exec 文件,jacoco也无法生成覆盖率报告。

跳过部分测试代码
  • surefire插件通过配置 属性来选择执行或不执行某些指定的测试用例,最终执行的测试代码是两者的交集
  • 例如,下面代码中,最终会执行所有类名以 Test 结尾的测试类,并且不执行所有类名以 TestCase 结尾的测试类

    org.apache.maven.plugins
    maven-surefire-plugin
    2.4.2
    
        
    		***Test.class
    	
        
    		***Test.class -->匹配所有类名以 Test 结尾的测试类

**/example* -->匹配所有包路径中包含 example 的测试类

Jacoco生成覆盖率报告

maven-surefire-plugin插件使用 true 或者 配置可以跳过或者选择指定的测试类,但在使用Jacoco统计覆盖率是,实际上那些被指定跳过的代码也还是会被统计进来的。

例如,假设有三个类 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覆盖率,方便代码开发调试。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353556.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号