Junit单元测试之Maven项目集成Jacoco,查看覆盖率报告

news2024/11/20 21:26:36

关于单元测试以及本文Calculate类等内容,请见前述文章Junit单元测试_Joy T的博客-CSDN博客

要学Jacoco,首先要知道测试覆盖率是什么!

测试覆盖率

测试覆盖率表示的是测试用例所能触及(或“覆盖”)的代码百分比。换句话说,它显示了你的测试用例运行时实际执行的代码量与总代码量的比例

如果是那种极简的输入输出的测试,本质上什么也没干的,没有牵动调用业务代码的,都不会考虑进入测试覆盖率的计算当中。

以下是一些关键点:

  1. 行覆盖率:这是最常用的指标,表示测试用例执行了多少百分比的代码行。

  2. 分支覆盖率:这表示测试用例覆盖了代码中多少百分比的决策点或分支(例如,ifswitch 语句)。

  3. 类和方法覆盖率:这表示测试用例覆盖了代码中多少百分比的类和方法。

但需要注意的是,虽然覆盖率是一个有用的指标,但它不能完全表示测试的质量。有时候,即使覆盖率很高,也可能遗漏了一些关键的、边缘的或错误的情况。所以,除了追求高的测试覆盖率,还要确保测试用例的质量和完整性,确保它们确实检测到可能的错误和异常情况。

过度依赖测试覆盖率很容易陷入以下几个陷阱:

  1. 盲目追求100%覆盖率:有时,追求100%的覆盖率可能导致开发者为了增加覆盖率而编写无意义或低价值的测试,这些测试并不真正检查应用的正确性或关键功能。

  2. 忽视测试质量:测试覆盖率不会告诉你测试的质量。一个测试可能覆盖了很多代码,但如果它没有合理的断言和逻辑判断,那么这个测试的价值可能很低。

  3. 错过关键路径:仅仅因为代码被覆盖并不意味着所有的执行路径或业务逻辑都已被测试。可能存在未被测试的复杂场景或边缘案例。

  4. 产生误导:一个非常高的测试覆盖率可能会给团队带来过分的自信,使他们认为软件是没有缺陷的。但实际上,可能仍然存在未被发现的问题。

  5. 降低开发效率如果开发者过于关注覆盖率,他们可能会花费大量时间编写和维护不那么重要的测试,而忽视了更有价值、更关键的测试。

简而言之,测试覆盖率可以帮助你发现可能遗漏的测试区域,但不能完全代替对测试质量的判断。


Jacoco前言

Jacoco 是 Java 代码覆盖率的一个非常流行的工具,它可以用来测量项目中代码的覆盖率。作者在网上学习过程中发现一些问题:

大部分 Jacoco 对于Springboot项目的使用流程是:需要项目打包成jar包,然后启动一个agent监听。然后通过Postman这样的工具去测试,这里测试的应该是接口测试。Jacoco能不能看到单元测试的测试覆盖率呢?另外,如果使用Jacoco监听接口测试,需要把所有的测试都做一遍才能最后生成测试报表吧?

  1. 使用JaCoCo是否需要打包成JAR

    • 不一定。可以在 IDE 中直接查看单元测试的覆盖率,或者通过 Maven/Gradle 的 Jacoco 插件在构建过程中生成覆盖率报告。但如果你想查看集成测试或手工测试的覆盖率,那么通常需要以 agent 的方式启动应用,并在测试结束后生成报告。
    • 上面两种查看单元测试的覆盖率方法作者都会在下文讲解。
  2. JaCoCo 能否查看单元测试的覆盖率

    • 能。JaCoCo 可以查看单元测试、集成测试或其他任何形式测试的代码覆盖率。
  3. 使用 JaCoCo 监听接口测试

    • 如果使用 JaCoCo 的 agent 来监听接口测试,需要运行所有相关的接口测试来确保覆盖率报告的准确性。只有当你运行了所有的测试,你才能得到一个完整的覆盖率报告。
    • 作者还没有尝试Springboot的测试,本文以maven项目简单的单元测试为例。

直接在IDEA中查看测试覆盖率

在测试类中右键,有一个More Run\Debug,选中第一个...Coverage,项目会重新测试一遍并计算得到测试覆盖率,其示意图如下:

Class 类覆盖率、Method 方法覆盖率、Line 行覆盖率。没啥技术含量,而且如果涉及到整个项目的接口测试就看不出来什么了,对于简单看看单元测试来说,还是挺好用的一个方法。


Maven项目中配置Jacoco插件

Pom.xml文件配置

作者不清楚什么版本,反正学什么东西都别下最新版的,首先要在pom.xml文件中配置插件信息:

    <build>
        <plugins>
            <!-- ... 其他的插件 ... -->

            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.7</version> <!-- 这是截止到我知识更新日期的最新版本,你可以检查是否有更新 -->
                <executions>
                    <execution>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <!-- attached to Maven test phase; generate coverage reports -->
                    <execution>
                        <id>report</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

作者的Junit配置如下:

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

生成覆盖率报告

现在已经设置了 Jacoco,可以使用以下 Maven 命令来运行测试并生成覆盖率报告(运行流程在下面“注意点”部分)

mvn clean test

上述命令会首先清除 target/ 目录(确保一切都是从新的开始),然后运行测试。在测试结束后,JaCoCo 会生成覆盖率报告。

注意点

首先,该命令是在根目录下执行的。根目录就是整个maven项目的根目录,以作者的根目录为例:

根目录点击下面的 Terminal 就能打开。然后,该命令执行时需要保证Maven项目的bin目录已经在环境变量中配好,才能执行 mvn 命令。最后结果如下:

查看报告

完成上述步骤后,我们可以在项目的 target/site/jacoco/ 目录下找到一个名为 index.html 的文件。可以使用任何 web 浏览器打开这个文件来查看覆盖率报告。作者结果如下:

作者其余方法要么是没有测试类,要么就是Demo测试类没有真正调用业务方法,所以显示只有Calculate方法被完全覆盖。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1094597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年起重信号司索工(建筑特殊工种)证考试题库及起重信号司索工(建筑特殊工种)试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年起重信号司索工(建筑特殊工种)证考试题库及起重信号司索工(建筑特殊工种)试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特…

kafka安装和使用的入门教程

这篇文章简单介绍如何在ubuntu上安装kafka&#xff0c;并使用kafka完成消息的发送和接收。 一、安装kafka 访问kafka官网Apache Kafka&#xff0c;然后点击快速开始 紧接着&#xff0c;点击Download 最后点击下载链接下载安装包 二、启动kafka 经过上一步下载完成后&#xff…

新网站如何快速接入百度推荐

百度站长工具 在百度站长工具中点击“自动推送”&#xff0c;如下截图: 推送代码放网站的底部 将百度平台提交的主动推送代码放在自己的网站的底部模板中&#xff1b; <script> (function(){ var bp document.createElement(script); var curProtocol window.locati…

基于算术优化优化的BP神经网络(分类应用) - 附代码

基于算术优化优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于算术优化优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.算术优化优化BP神经网络3.1 BP神经网络参数设置3.2 算术优化算法应用 4.测试结果…

KOSMOS-2.5:密集文本的多模态读写模型

Overview 总览摘要1 引言2 KOSMOS-2.52.1 模型结构2.1 图像和文本表征2.3 预训练数据2.4 数据处理2.5 过滤与质量控制 3 实验3.1 评估3.2 实现细节3.3 结果3.4 讨论 4 相关工作4.1 多模态大语言模型4.2 图文理解 5 总结与展望 总览 题目: KOSMOS-2.5: A Multimodal Literate M…

中断机制-通过volatile实现线程中断停止

4.1.4 大厂面试题中断机制考点 如何停止中断运行中的线程&#xff1f; 通过一个volatile变量实现 package com.nanjing.gulimall.zhouyimo.test;import java.util.concurrent.TimeUnit;/*** author zhou* version 1.0* date 2023/10/15 2:34 下午*/ public class InterruptD…

选择排序(学习笔记)

选择排序 选择排序的基本思想是冒泡排序&#xff0c;记录当前位置i和最小值k的位置&#xff0c;使用一个变量j往后寻找。 每一轮找到最小值后与第一个元素进行交换&#xff0c;以此类推。 不使用辅助变量交换两个元素的值方法 package com.company.sort;import java.util.Ra…

【AI视野·今日NLP 自然语言处理论文速览 第五十一期】Tue, 10 Oct 2023

AI视野今日CS.NLP 自然语言处理论文速览 Tue, 10 Oct 2023 (showing first 100 of 172 entries) Totally 100 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Few-Shot Spoken Language Understanding via Joint Speech-Text Model…

使用PyTorch加载数据集:简单指南

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

网络链接失败怀疑是服务器处于非正常状态?如何用本地电脑查看服务器是否正常?

网络链接失败怀疑是服务器处于非正常状态&#xff1f;如何用本地电脑查看服务器是否正常&#xff1f; 网页会出现链接失败&#xff0c;可以实时用cdm大法&#xff0c;cdm可以更好的排查字节数据的返回&#xff0c;可以让我们更好的要检查服务器是否处于正常状态&#xff0c;接下…

纯文本邮件发送:java

1.打开jdk的conf下的security文件的.security,找到并删除&#xff0c;权限问题建议复制文件修改后替换 jdk.tls.disabledAlgorithmsSSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \ DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL 删除后的内容 然…

Linux服务器实验总结以及回顾(全)

Linux 一、搭建简单的论坛1、准备工作2、实现步骤2.1 挂载光盘2.2 搭建yum安装环境2.2.1 网络源&#xff1a;2.2.2 本地源 2.3 安装http服务2.4 启动http服务并配置开机自启动2.5 安装软件包:mariadb-server,php,php-mysql[php*]2.6 下载并解压论坛源码包Discuz2.7 设置selinux…

Infuse Mac视频播放器 中文

Infus是一款非常好用的播放器软件&#xff0c;它具有广泛的格式支持和强大的解码能力&#xff0c;可以播放各种视频和音频文件。同时&#xff0c;它还支持杜比视界和杜比音效&#xff0c;可以提供高品质的视听体验。此外&#xff0c;Infus还具有直观易用的用户界面和频繁的软件…

Stable Diffusion绘图,lora选择

best quality, ultra high res, (photorealistic:1.4), 1girl, off-shoulder white shirt, black tight skirt, black choker, (faded ash gray hair:1), looking at viewer, closeup <lora:koreandolllikeness_v20:0.66> 最佳品质&#xff0c;超高分辨率&#xff0c;&am…

Java调用FFmpeg

Java调用FFmpeg 1、FFmepg基础知识1.1 下载 FFmpeg1.2 FFmpeg 工具使用 2、Java使用2.1 FFmpeg源码编译2.2 Java集成FFmpeg2.2.1 JNI2.2.2 Java调用执行 FFmpeg 工具 命令 1、FFmepg基础知识 About FFmpeg ffmpeg(计算机程序) - 百度百科 FFmpeg/FFmpeg - GitHub CSDN&#xf…

接口测试如何测?最全的接口测试总结,资深测试老鸟整理...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、接口测试的流程…

软件工程与计算总结(十三)详细设计中的模块化与信息隐藏

一.模块化与信息隐藏思想 1.设计质量 好的设计要着重满足以下3方面&#xff1a;可管理性、灵活性、可理解性好的设计需要侧重于间接性和可观察性——简洁性使得系统模块易于管理&#xff08;理解和分解&#xff09;、开发&#xff08;修改与调试&#xff09;和复用。实践者都…

基于适应度相关优化的BP神经网络(分类应用) - 附代码

基于适应度相关优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于适应度相关优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.适应度相关优化BP神经网络3.1 BP神经网络参数设置3.2 适应度相关算法应用 4…

【软考】9.2 串/数组/矩阵/广义表/树

《字符串》 一种特殊的线性表&#xff0c;数据元素都为字符模式匹配&#xff1a;寻找子串第一次在主串出现的位置 模式匹配算法 1. 暴力破解法&#xff08;布鲁特-福斯算法&#xff09; 主串与子串一个个匹配效率低 2. KMP算法 主串后缀和子串前缀能否找到一样的元素&#xf…

轻量化Backbone | ShuffleNet+ViT结合让ViT也能有ShuffleNet轻量化的优秀能力

视觉Transformer&#xff08;ViTs&#xff09;在各种计算机视觉任务中表现出卓越的性能。然而&#xff0c;高计算复杂性阻碍了ViTs在内存和计算资源有限的设备上的适用性。尽管某些研究已经深入探讨了卷积层与自注意力机制的融合&#xff0c;以增强ViTs的效率&#xff0c;但在纯…