在idea中使用JaCoCo插件统计单元测试覆盖率

2023-10-27

        在后台工程师开发完新代码交给QA进行测试时,软件测试人员一般都会要求后台开发对单元测试的覆盖率达到一定的标准;例如我们的标准是分支覆盖率达到50%以上,函数覆盖率达到50%以上。

        在idea中查看覆盖率挺简单的,idea中支持三种插件来查看覆盖率,每种插件统计明细各有千秋,分别是idea自带插件、JaCoCo、Emma。

         在idea中打开一个测试类,点击右上角“Edit Configurations”按钮,如下图所示:

 

       然后会弹出一个框,左侧菜单栏显示JUnit栏目,右边我们选择“Code Coverage"选项卡,下面有一个”choose coverage runner“下拉菜单,默认是idea自带的,我们可以切换成其他的(只不过需要在pom中配置一下),如下图所示:

 

       idea默认自带的插件,统计出来的覆盖率只包含classes、method、line,不太详细,不能满足我们的要求;所以一般使用JaCoCo插件来统计,我们切换成JaCoCo插件以后,紧接着在maven的pom文件中这样配置:

(1)添加依赖

<dependency>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.2</version>
</dependency>

(2)配置plugins

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.2</version>
    <configuration>
        <destFile>target/coverage-reports/jacoco-unit.exec</destFile>
        <dataFile>target/coverage-reports/jacoco-unit.exec</dataFile>
        <includes>
            <include>**/service/**</include>
            <include>**/controller/**</include>
            <!--<include>**/service/impl/*.class</include>-->
        </includes>
        <!-- rules里面指定覆盖规则 -->
        <rules>
            <rule implementation="org.jacoco.maven.RuleConfiguration">
                <element>BUNDLE</element>
                <limits>  
                    <!-- 指定方法覆盖到50% -->
                    <limit implementation="org.jacoco.report.check.Limit">
                        <counter>METHOD</counter>
                        <value>COVEREDRATIO</value>
                        <minimum>0.50</minimum>
                    </limit>
                    <!-- 指定分支覆盖到50% -->
                    <limit implementation="org.jacoco.report.check.Limit">
                        <counter>BRANCH</counter>
                        <value>COVEREDRATIO</value>
                        <minimum>0.50</minimum>
                    </limit>
                    <!-- 指定类覆盖到100%,不能遗失任何类 -->
                    <limit implementation="org.jacoco.report.check.Limit">
                    <counter>CLASS</counter>
                    <value>MISSEDCOUNT</value>
                    <maximum>0</maximum>
                    </limit>
                </limits>
            </rule>
        </rules>
    </configuration>
    <executions>
        <execution>
            <id>jacoco-initialize</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
        <!--这个check:对代码进行检测,控制项目构建成功还是失败-->
        <execution>
            <id>check</id>
            <goals>
                <goal>check</goal>
            </goals>
        </execution>
        <!--这个report:对代码进行检测,然后生成index.html在 target/site/index.html中可以查看检测的详细结果-->
        <execution>
            <id>jacoco-site</id>
            <phase>package</phase>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
    </executions>

</plugin>

       如果你想使用idea自带的插件,查看简单的覆盖率数据,可以直接在测试类上右键点击”Run ‘xxxxxTest' with Coverage",如下图所示:

 

      当JaCoCo插件配置好以后,要获得 JaCoCo的统计数据,就要执行mvn install 命令。执行完以后,target/site/jacoco/目录下会生成一个index.html文件,这是统计数据总览页面,可以在浏览器打开查看,如下图所示:

       由于我们在pom文件的plugin里面配置了rule规则和check 目标,所以在覆盖率不满足的情况下,mvn install是不会成功的,并且会报错:

 

      另一个需要注意的是我在rule中配置的规则,有的是 COVEREDRATIO,有的是MISSEDCOUNT,这说明有的统计的是覆盖率,有的统计的是丢失率(也即未覆盖到的),你可别看错了。

      配置JaCoCo插件一定注意和JDK版本的对应关系,如果你用的是jdk1.8,则插件一定要用最新版,要不然会报如下错误:

Caused by: java.lang.RuntimeException: Class java/util/UUID could not be instrumented.
    at org.jacoco.agent.rt.internal_5d10cad.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:138)
    at org.jacoco.agent.rt.internal_5d10cad.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:99)
    at org.jacoco.agent.rt.internal_5d10cad.PreMain.createRuntime(PreMain.java:51)
    at org.jacoco.agent.rt.internal_5d10cad.PreMain.premain(PreMain.java:43)
    ... 6 more
Caused by: java.lang.NoSuchFieldException: $jacocoAccess
    at java.lang.Class.getField(Class.java:1542)
    at org.jacoco.agent.rt.internal_5d10cad.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:136)
    ... 9 more
FATAL ERROR in native method: processing of -javaagent failed
Exception in thread "main" 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在idea中使用JaCoCo插件统计单元测试覆盖率 的相关文章

  • 自动化测试——接口测试

    一 接口分类 1 内部接口 测试被测系统各个子模块之前的接口 或者测试被测系统提供给内部用户系统使用的接口 2 外部接口 被测系统调用外部的接口 系统对外提供的接口 接口测试重点 检查结论参数传递的正确性 输出结果的正确性及对各种异常情况的
  • 如何让 Jenkins 从代码覆盖率中排除整个文件夹?

    我试图弄清楚如何从 jacoco 由 Jenkins 启动 生成的代码覆盖率报告中排除文件夹列表 似乎可以排除类 但不能排除文件夹 这对我来说很烦人 因为我已经开始使用一个相当大的库用于在线支付系统 运行这些单元测试意味着不断在该平台上创建
  • 如何使用 Jacoco 和多个模块在 Jenkins 中实现代码覆盖率?

    我的代码结构如下 events消息其他代码功能测试 在 jacoco 的构建脚本中 首先它必须复制所有类并使用该类目录来运行该工具 您能否在此处描述目标目录的步骤 我的意思是如何提及运行代码覆盖率的目录 构建后 每个文件夹都有自己的目标文件
  • EclEmma、Java8 和 Lambda - 不涉及 lambda 表达式

    我在 Eclipse Luna 下有一个 Java 项目 使用 EclEmma 2 3 1 201405111647 最新 它使用 Jacoco 0 7 1 它支持 Java 8 如其变更日志 2 3 1版本 2014 05 11 Fixe
  • Android Studio 中的 Jacoco 代码覆盖率

    我已经尝试安静地运行 Jacoco 测试覆盖有一段时间了 我已经尝试了这些主题中报告的几种可能的解决方案 使用 JaCoCo Gradle 插件测试 Android 代码覆盖率 https stackoverflow com questio
  • Jacoco 执行文件始终出现 EOFException

    我尝试为 Sonarqube 生成 Jacoco 报告 生成文件 jacoco exec 可以工作 但在 Eclipse 的 EclEmma 中将其用于 Sonarqube 或会导致 EOFException 因此这两种实现都很糟糕 或者生
  • 如何在现有项目中激活 GitLab Pages?

    我想发布我的 Java 项目的代码覆盖率报告already在 GitLab 上 我使用 JaCoCo 在位于以下位置的文件夹中生成代码覆盖率报告app target site jacoco 我发现我必须激活 GitLab Pages 但是这
  • Jacoco 和 Sonar 代码覆盖率?

    Using JaCoCo 0 5 3 Maven2 声纳 2 14 声纳 maven 插件 1 8 S artGWT 3 0 目前正在尝试 在 Sonar 上获取我的 Selenium 单元测试的代码覆盖率 问题 尽管传感器正确启动 代码覆
  • Mockito3.x详解

    目录 Mockito 1 简单示例 2 打桩测试 3 参数匹配器 4 调用次数验证 5 通过打桩为无返回值函数抛出异常 6 验证调用顺序 7 验证从未发生过的交互
  • 在运行时转储执行数据

    我正在使用 JaCoCo 生成代码覆盖率报告 并且我有许多场景需要生成单独的报告 问题是该程序非常庞大 大约需要 2 分钟才能启动并加载所有类文件 我想在其中一个场景完成后立即获取运行时的执行数据 然后开始下一个场景 而不是为每个场景重新启
  • JaCoCo:缺少类目录

    我对 JaCoCo 相当陌生 在生成代码覆盖率报告时遇到问题 这是我的项目结构 我的集成测试位于 integration tests 模块中 当我使用 mvn 构建项目时 我在日志记录中收到以下内容 INFO Skipping JaCoCo
  • 如何计算 Selenium 测试相对于 Web 应用程序代码的代码覆盖率

    我需要将我的硒测试的代码覆盖率捕获到所覆盖的服务器代码 Web 应用程序源代码 中的源代码量 例如 登录功能的测试应捕获 Web 应用程序中登录功能所涵盖的代码量 否则需要知道它在完成的场景的 Web 应用程序代码中触及了哪个包或类 例如登
  • JaCoCo 在跳过 JaCoCo 执行后才生成 jacoco.exec

    我在我的模块之一中通过 JaCoCo 生成 AHP 报告时遇到问题 当构建开始时 我看到 JaCoCo 正确设置 argLine 为 INFO jacoco agent argLine set to javaagent lt gt m2 r
  • Jacoco 报告称,在 Android 项目中,单元测试对 Kotlin 类的覆盖率为 0

    我正在使用 Android Gradle 插件 3 0 0 我正在将 Android 应用程序从 java 迁移到 kotlin 我的应用程序有 Java 和 Kotlin 中的类 并且测试是用 Java 编写的 I run gradlew
  • 将 JaCoCo 与 SONAR 集成以实现单元和集成测试覆盖

    有没有人尝试使用 ANT 构建配置 JaCoCo 将单元测试和集成测试的覆盖范围转储到 2 个不同的文件中 以便 SONAR 使用它们 这是一个可行的解决方案 为单元测试和集成测试生成报告 该解决方案使用的是append战略 请注意 为了在
  • JaCoCo 使用 Kotlin 和 Android 3.0 返回 0% 覆盖率

    我正在尝试检查我用 Kotlin 编写的测试用例的代码覆盖率 当我执行时 gradlew createDebugCoverageReport info 我的coverage ec 文件为空 并且我的报告表明我的覆盖率是0 请注意 测试用例
  • 如何向 Android 应用程序提供 Jacoco 代理?

    我正在尝试使用 Jacoco 进行手动测试来获得代码覆盖率 我正在尝试使用离线仪器 http www eclemma org jacoco trunk doc offline html http www eclemma org jacoco
  • SonarQube 分支机构覆盖范围

    是否可以获取 SonarQube 中非主分支的代码覆盖率详细信息 我看到的其他分支的唯一两个选项卡是Issues and Code 我为每个分支运行相同的 Gradle JaCoCo Sonar 命令 gradlew report sona
  • Java8 项目上的 SonarQube 给出 jacoco-Exception

    我刚刚下载了最新版本 SonarQube 4 3 然后尝试使用以下命令构建 java 8 项目 mvn clean install mvn sonar sonar 这给了我下面的例外 谷歌搜索 我的印象是这是一个早期的问题 应该已经解决 h
  • JaCoCo 具有微服务项目架构?

    我的项目由 6 个 Java 微服务组成 我试图弄清楚如何将 Jacoco 的 html 报告合并到一份整体覆盖率报告中 就目前情况而言 我最终为每项服务提供了一份报告 如果能有一份汇总报告就好了 这样我就可以更轻松地将其放入我们的 CI

随机推荐

  • 利用java程序实现文件加密

    我们的文件在计算机中都是以二进制的形式存储 而Java中IO流 字节流和字符流 可以实现对底层文件的读取 故利用Java的IO流进行文件拷贝时 可以对底层二进制进行加密操作 随后通过解密操可以还原 例如 我们对桌面上的一段avi视频文件进行
  • 交换机GVRP协议配置(华为ensp)

    什么是gvrp协议 GVRP GARP VLAN Registration Protocol 称为VLAN注册协议 是用来维护交换机中的VLAN动态注册信息 并传播该信息到其他交换机中 避免了我们手工一个个去配置静态VLAN 进而提高工作效
  • 《吐血整理,tomcat原理面试

    是的 内核可以编辑 因为它是根据通用公共许可证发行的 6 什么是BASH 回答 Bash是Brian Fox为GNU项目编写的Unix shell和命令处理器 它是免费软件 可以代替Bourne Shell 这是一个解释后的未编译过程 也可
  • 项目常见属性

    项目常见属性 flex 项目占的份数 align self 控制子项自己在侧轴的排列方式 前面的align items 和 align content 是对所有子项应用相同的排列方式 而这个属性是对单个子项应用个性化的排列方式 order
  • YEARWEEK函数来得到本周的日期

    本文来说下如何使用YEARWEEK函数来得到本周的日期 文章目录 使用介绍 使用介绍 首先介绍一个函数 YEARWEEK date mode 主要说明一下后面的可选参数mode 这个参数就是指定一周里面哪一天是第一天 默认一周是从周日开始
  • 数据统计分析常用指标

    在进行数据分析时 经常会遇到一些分析指标或术语 这些术语是帮助我们打开思路 通过多个角度对数据进行深度解读 可以说是前人已经总结和使用的数据分析方法 下面是数据统计分析常用的指标或术语 1 平均数 一般指算术平均数 算术平均数是指 全部数据
  • MCS-51 串行口

    串行通讯的基本概念 通讯的基本方式 串行通讯与并行通讯 串行同步通讯 串行异步通讯 单工 半双工和全双工串行通讯 并行通讯 数据各位同时传送 串行通讯 数据一位一位顺序传送 串行异步通讯 按照事先约定好的速率收发数据 串行同步通讯 一种串行
  • vue简单的排序案例

    div div
  • Python三维点云实战:从入门到深度学习

    Python三维点云实战 从入门到深度学习 三维点云是现代计算机视觉和机器学习领域中一个非常重要的数据形式 具有广泛应用 本文将介绍如何在Python中使用Open3D这个开源库读取 可视化 处理和分割三维点云 此外 我们还将介绍如何使用P
  • uniapp 分页,分为scroll-view以及页面下拉刷新 onReachBottom两种情况

    1 包含在scroll view里的滚动分页
  • 我的编程之路~常用Python代码和函数分享

    在学习编程的过程中 我们会遇到大量的代码 函数和概念 为了能够更好地掌握和记忆这些内容 我通常会记录下来作为学习的参考 下面我来分享一些我常用的Python代码和函数 希望能给小伙伴们带来帮助 1 列表操作 创建列表 使用方括号 例如 li
  • SpringMVC集成Swagger2,初尝试和遇到的相关问题

    本文章更新页请至 http blog csdn net MikeLC7 article details 75088123 之前项目的接口文档都是手动编写Word文档来做 制作成本较高 并且在进行版本迭代的时候进行标注和说明不是很方便 后来发
  • 电池的安规认证(IEC/EN)和航空运输认证UN38.3

    IEC62133 EN62133认证标准 使用范围及介绍 可充电电池和电池组 碱性或其他非酸性电解质 密封便携式电池的安全要求 测试项目测试项目 连续低倍率充电 振动 高温模壳应力 高低温循环 反充电 镍电 外部 短路 自由跌落 机械冲击
  • H5页面,上下滑动翻页

    针对之前的版本 https blog csdn net qq 16494241 article details 78095575进行了升级修改 改用原生JS编写 之前的基于JQ 可设置页面内容元素内部滚动及滚动至顶部或最底部触发翻页效果 P
  • 海湾标准汉字码表查询_标准汉字码表

    A 安 1618 暗 1621 按 1620 案 1624 B 吧 1641 八 1643 白 1655 百 1657 班 1664 般 1667 板 1669 半 1675 办 1676 帮 1679 棒 1684 包 1692 薄 17
  • Oracle navicat新建表空间,用户

    第一次使用oracle 记录一下遇到的不少坑 新建表空间 1 点击其它 gt 表空间 gt 新建表空间 2 填好基本信息 然后点击保存 大小 物理路径 自动扩展on off以及大小 创建好表空间后 新建用户 1 第一次使用的话 首先重启数据
  • linux特殊权限位之setuid、setgid和sticky

    我们登陆到系统之后 创建一个普通文件或者目录的时候 会有一个默认的权限 普通文件是644 目录文件是755 想必大家都知道这个是由umask这个值决定的 我们可以直接执行umask命令查看 linux系统默认的umask值是0022 想改变
  • 组合预测模型

    组合预测模型 EMD KPCA LSTM EMD LSTM LSTM多输入单输出回归预测对比 Matlab程序 目录 组合预测模型 EMD KPCA LSTM EMD LSTM LSTM多输入单输出回归预测对比 Matlab程序 预测结果
  • 声音反卷积matlab,用MATLAB做反卷积

    关键词 反卷积 MATLAB fft 频移 分母中频谱零点 卷积核 代码如下 clear all clc h 1 1 1 1 要求 f 1 2 3 2 已知 g conv h f 已知 g h f 这里卷积结果g知道 f知道 f视作卷积核
  • 在idea中使用JaCoCo插件统计单元测试覆盖率

    在后台工程师开发完新代码交给QA进行测试时 软件测试人员一般都会要求后台开发对单元测试的覆盖率达到一定的标准 例如我们的标准是分支覆盖率达到50 以上 函数覆盖率达到50 以上 在idea中查看覆盖率挺简单的 idea中支持三种插件来查看覆