test 系统学习-05-test jacoco 测试覆盖率与 idea 插件

2024-01-05 06:44

本文主要是介绍test 系统学习-05-test jacoco 测试覆盖率与 idea 插件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. idea 中使用 maven jmockit,如何查看增量的代码覆盖率

在使用 Maven 和 JMockit 进行单元测试时,你可以结合使用 JaCoCo 插件来查看增量的代码覆盖率报告。

JaCoCo 是一个流行的代码覆盖率工具,它与 Maven 集成良好,并且可以与 JMockit 一起使用。

下面是在 IntelliJ IDEA 中使用 Maven 和 JMockit 来查看增量的代码覆盖率的步骤:

  1. 确保你的 Maven 项目已经正确配置了 JaCoCo 插件。在你的 Maven POM 文件中,添加以下插件配置:
<build><plugins><!-- JaCoCo 插件配置 --><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.7</version><executions><execution><id>prepare-agent</id><goals><goal>prepare-agent</goal></goals></execution><execution><id>report</id><phase>prepare-package</phase><goals><goal>report</goal></goals></execution><execution><id>check</id><goals><goal>check</goal></goals><configuration><rules><rule><element>BUNDLE</element><limits><limit><counter>LINE</counter><value>COVEREDRATIO</value><minimum>0.80</minimum></limit></limits></rule></rules></configuration></execution></executions></plugin><!-- 其他插件配置 --></plugins>
</build>
  1. 在 IntelliJ IDEA 中打开 Maven 项目。确保项目已正确加载和配置。

  2. 在 IntelliJ IDEA 的底部工具栏中,点击 “Maven Projects” 图标,打开 Maven 项目窗口。

  3. 在 Maven 项目窗口中,展开 “Plugins” -> “jacoco” -> “jacoco:check”。

  4. 右键点击 “jacoco:check”,选择 “Run Maven Build”。

  5. Maven 将执行 JaCoCo 插件的 jacoco:check 目标,并生成增量的代码覆盖率报告。

  6. 在 Maven 项目窗口中,展开 “target” -> “site” -> “jacoco”,找到 index.html 文件。

  7. 双击 index.html 文件,它将在浏览器中打开,显示增量的代码覆盖率报告。

在代码覆盖率报告中,你可以查看各个类和方法的覆盖率百分比,了解哪些部分的代码被测试覆盖到了,哪些部分没有覆盖到。你还可以查看具体的代码行,以及覆盖和未覆盖的行数。

通过这种方式,你可以方便地在 IntelliJ IDEA 中使用 Maven 和 JMockit 来生成并查看增量的代码覆盖率

2. 如何编写一个 idea 插件,直接运行查看 jacoco 的覆盖率,让用户不修改 maven 信息?

要编写一个 IntelliJ IDEA 插件,以便在不修改 Maven 信息的情况下直接运行和查看 JaCoCo 的代码覆盖率报告,你可以遵循以下步骤:

  1. 创建一个 IntelliJ IDEA 插件项目:在 IntelliJ IDEA 中,选择 “File” -> “New” -> “Project”,然后选择 “IntelliJ Platform Plugin”。

  2. 配置插件项目:按照向导的提示,为插件项目选择合适的名称、位置和其他设置。

  3. 在插件项目中添加 JaCoCo 依赖:在插件项目的 build.gradlepom.xml 文件中,添加 JaCoCo 依赖。

例如,对于 Maven 项目,可以添加以下依赖:

<dependency><groupId>org.jacoco</groupId><artifactId>org.jacoco.agent</artifactId><version>0.8.7</version><scope>test</scope>
</dependency>
  1. 创建插件的 Action 类:在插件项目中,创建一个继承自 AnAction 的类,该类将用于触发运行和查看 JaCoCo 覆盖率报告的操作。
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.Project;public class RunJacocoCoverageAction extends AnAction {@Overridepublic void actionPerformed(AnActionEvent event) {Project project = event.getProject();// 在此处编写运行 JaCoCo 覆盖率的逻辑}
}
  1. plugin.xml 文件中注册插件的 Action:在插件项目的 src/main/resources/META-INF 目录下,找到或创建 plugin.xml 文件。在该文件中注册插件的 Action。
<actions><group id="YourGroupId" text="YourMenuText" description="YourDescription"><action id="RunJacocoCoverageAction" class="com.example.RunJacocoCoverageAction" text="Run Jacoco Coverage" description="Run Jacoco Coverage"/></group>
</actions>
  1. actionPerformed 方法中编写 JaCoCo 覆盖率的逻辑:在 actionPerformed 方法中,编写运行 JaCoCo 覆盖率的逻辑。可以使用 JaCoCo 的 API 来执行覆盖率测试,并生成报告。
import org.jacoco.agent.rt.RT;public class RunJacocoCoverageAction extends AnAction {@Overridepublic void actionPerformed(AnActionEvent event) {Project project = event.getProject();// 执行 JaCoCo 覆盖率测试RT.getAgent().setSessionId("your-session-id");// 运行你的测试代码// ...// 生成覆盖率报告// ...}
}
  1. 编译和运行插件:使用 IntelliJ IDEA 提供的工具,将插件项目编译为插件包(JAR 文件),然后在 IntelliJ IDEA 中安装和运行插件。

  2. 在 IntelliJ IDEA 中使用一旦你安装和运行了插件,你可以按照以下步骤在 IntelliJ IDEA 中使用插件来直接运行和查看 JaCoCo 的覆盖率报告:

  3. 打开你想要测试覆盖率的项目或文件。

  4. 在 IntelliJ IDEA 的菜单栏中,选择 “Run” -> “Run Jacoco Coverage”(或你在注册插件的时候指定的文本)。

  5. 插件将执行 JaCoCo 覆盖率测试并生成覆盖率报告。

  6. 一旦测试完成,插件将在 IntelliJ IDEA 的工具窗口中显示覆盖率报告。

通过这种方式,你可以使用你编写的插件来直接运行和查看 JaCoCo 的覆盖率报告,而无需修改项目的 Maven 信息。

请注意,以上提供的是一个简单的示例,用于说明如何创建和使用一个基本的 IntelliJ IDEA 插件。

在实际开发中,你可能需要进一步完善插件的功能和界面,以满足你的具体需求。

你可以参考 IntelliJ IDEA 插件开发文档和 JaCoCo 文档,深入了解更多细节和定制选项。

actionPerformed 的信息可以更加详细些吗?对于 jacoco 的执行逻辑

当你在 actionPerformed 方法中编写 JaCoCo 覆盖率的逻辑时,以下是一个更详细的示例,包括 JaCoCo 的执行逻辑:

import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.Project;
import org.jacoco.agent.rt.RT;
import org.jacoco.core.tools.ExecFileLoader;
import org.jacoco.core.tools.IAgent;
import org.jacoco.core.tools.InstrumentTask;
import org.jacoco.report.IReportVisitor;
import org.jacoco.report.MultiReportVisitor;
import org.jacoco.report.html.HTMLFormatter;
import org.jacoco.report.xml.XMLFormatter;
import org.jacoco.report.csv.CSVFormatter;import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class RunJacocoCoverageAction extends AnAction {@Overridepublic void actionPerformed(AnActionEvent event) {Project project = event.getProject();// 1. 配置 JaCoCo AgentString sessionId = "your-session-id";RT.getAgent().setSessionId(sessionId);// 2. 运行测试代码// 在这里运行你的测试代码,确保代码中已经加载了 JaCoCo Agent// 3. 生成覆盖率报告try {// 创建报告文件和目录String reportDirectory = "path/to/report/directory";new File(reportDirectory).mkdirs();String reportFile = reportDirectory + File.separator + "coverage.exec";// 保存执行数据IAgent agent = RT.getAgent();byte[] executionData = agent.getExecutionData(false);ExecFileLoader loader = new ExecFileLoader();loader.load(agent.getExecutionData(false));// 生成不同格式的报告List<IReportVisitor> visitors = new ArrayList<>();visitors.add(createHtmlReportVisitor(reportDirectory));visitors.add(createXmlReportVisitor(reportDirectory));visitors.add(createCsvReportVisitor(reportDirectory));// 合并报告MultiReportVisitor multiReportVisitor = new MultiReportVisitor(visitors);// 生成报告multiReportVisitor.visitInfo(loader.getSessionInfoStore().getInfos(), loader.getExecutionDataStore().getContents());// 输出报告multiReportVisitor.visitEnd();// 输出执行数据到文件loader.save(new File(reportFile), false);} catch (IOException e) {e.printStackTrace();}}// 创建 HTML 格式的报告访问器private IReportVisitor createHtmlReportVisitor(String reportDirectory) throws IOException {HTMLFormatter formatter = new HTMLFormatter();formatter.setOutputDirectory(new File(reportDirectory));return formatter.createVisitor();}// 创建 XML 格式的报告访问器private IReportVisitor createXmlReportVisitor(String reportDirectory) throws IOException {XMLFormatter formatter = new XMLFormatter();formatter.setOutputDirectory(new File(reportDirectory));return formatter.createVisitor();}// 创建 CSV 格式的报告访问器private IReportVisitor createCsvReportVisitor(String reportDirectory) throws IOException {CSVFormatter formatter = new CSVFormatter();formatter.setOutputDirectory(new File(reportDirectory));return formatter.createVisitor();}
}

在这个示例中,actionPerformed 方法执行以下操作:

  1. 配置 JaCoCo Agent,并设置会话ID。

  2. 运行测试代码,确保测试代码中已经加载了 JaCoCo Agent。你需要根据你的测试框架和项目结构来运行相应的测试代码。

  3. 生成覆盖率报告。首先,创建报告的目录,并准备一个报告文件。然后,通过 JaCoCo Agent 获取执行数据,并使用 ExecFileLoader 加载执行数据。接下来,创建报告访问器(这里示例中创建了 HTML、XML 和 CSV 格式的访问器),并将访问器添加到多报告访问器中。最后,访问报告信息并保存报告文件,同时保存执行数据到文件。

请确保你根据你的项目配置和需求,适当修改示例代码中的路径、文件名和格式化选项。

当你运行插件中的 “Run Jacoco Coverage” 操作时,它将执行测试代码,并在指定的报告目录下生成相应的覆盖率报告文件(HTML、XML 和 CSV 格式)。你可以打开生成的报告文件,查看详细的代码覆盖率信息。

请注意,这只是一个示例,你可以根据自己的需求进行修改和扩展。在实际开发中,你可能需要处理更多的测试框架和覆盖率报告选项。

同时,确保了解 JaCoCo 的用法和 API,以便更好地集成到你的插件中。

运行测试代码这个步骤可以自动化吗?

运行测试代码可以通过插件来实现自动化。

你可以在插件中编写逻辑,使用 IntelliJ IDEA 提供的功能来执行项目的测试代码。

以下是一个示例,演示如何在插件中自动运行测试代码:

import com.intellij.execution.ExecutionManager;
import com.intellij.execution.RunManager;
import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.executors.DefaultRunExecutor;
import com.intellij.execution.impl.ExecutionManagerImpl;
import com.intellij.execution.junit.JUnitConfiguration;
import com.intellij.execution.junit.JUnitConfigurationType;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.Project;public class RunJacocoCoverageAction extends AnAction {@Overridepublic void actionPerformed(AnActionEvent event) {Project project = event.getProject();// 创建 JUnitConfigurationJUnitConfigurationType configurationType = JUnitConfigurationType.getInstance();RunnerAndConfigurationSettings configurationSettings = RunManager.getInstance(project).createRunConfiguration("JacocoCoverage", configurationType.getConfigurationFactories()[0]);// 配置 JUnitConfigurationJUnitConfiguration configuration = (JUnitConfiguration) configurationSettings.getConfiguration();configuration.setPackage("com.example.tests"); // 设置要运行的测试包configuration.setVMParameters("-javaagent:path/to/jacocoagent.jar=destfile=path/to/coverage.exec"); // 设置 JaCoCo 的 VM 参数// 使用 DefaultRunExecutor 运行测试ExecutionManager executionManager = ExecutionManager.getInstance(project);ExecutionManagerImpl executionManagerImpl = (ExecutionManagerImpl) executionManager;executionManagerImpl.restartRunProfile(configurationSettings, DefaultRunExecutor.getRunExecutorInstance());}
}

在这个示例中,我们创建了一个 JUnitConfiguration 对象,并对其进行配置。你可以设置要运行的测试包、测试类、测试方法等。然后,我们使用 DefaultRunExecutor 来执行测试代码。

需要注意的是,上述示例中的代码是一个简化的版本,用于说明概念。在实际的插件开发中,你可能需要更多的逻辑和配置选项,以适应不同的项目结构和测试框架。

通过编写适当的插件代码,你可以实现自动化运行测试代码的功能,并与 JaCoCo 集成以生成覆盖率报告。

在这里插入图片描述

这篇关于test 系统学习-05-test jacoco 测试覆盖率与 idea 插件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/571989

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设