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

相关文章

基于C++的UDP网络通信系统设计与实现详解

《基于C++的UDP网络通信系统设计与实现详解》在网络编程领域,UDP作为一种无连接的传输层协议,以其高效、低延迟的特性在实时性要求高的应用场景中占据重要地位,下面我们就来看看如何从零开始构建一个完整... 目录前言一、UDP服务器UdpServer.hpp1.1 基本框架设计1.2 初始化函数Init详解

VSCode开发中有哪些好用的插件和快捷键

《VSCode开发中有哪些好用的插件和快捷键》作为全球最受欢迎的编程工具,VSCode的快捷键体系是提升开发效率的核心密码,:本文主要介绍VSCode开发中有哪些好用的插件和快捷键的相关资料,文中... 目录前言1、vscode插件1.1 Live-server1.2 Auto Rename Tag1.3

idea设置快捷键风格方式

《idea设置快捷键风格方式》在IntelliJIDEA中设置快捷键风格,打开IDEA,进入设置页面,选择Keymap,从Keymaps下拉列表中选择或复制想要的快捷键风格,点击Apply和OK即可使... 目录idea设www.chinasem.cn置快捷键风格按照以下步骤进行总结idea设置快捷键pyth

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出

CPython与PyPy解释器架构的性能测试结果对比

《CPython与PyPy解释器架构的性能测试结果对比》Python解释器的选择对应用程序性能有着决定性影响,CPython以其稳定性和丰富的生态系统著称;而PyPy作为基于JIT(即时编译)技术的替... 目录引言python解释器架构概述CPython架构解析PyPy架构解析架构对比可视化性能基准测试测

idea-java序列化serialversionUID自动生成方式

《idea-java序列化serialversionUID自动生成方式》Java的Serializable接口用于实现对象的序列化和反序列化,通过将对象转换为字节流来存储或传输,实现Serializa... 目录简介实现序列化serialVersionUID配置使用总结简介Java.io.Seripyth

C++简单日志系统实现代码示例

《C++简单日志系统实现代码示例》日志系统是成熟软件中的一个重要组成部分,其记录软件的使用和运行行为,方便事后进行故障分析、数据统计等,:本文主要介绍C++简单日志系统实现的相关资料,文中通过代码... 目录前言Util.hppLevel.hppLogMsg.hppFormat.hppSink.hppBuf

VS Code中的Python代码格式化插件示例讲解

《VSCode中的Python代码格式化插件示例讲解》在Java开发过程中,代码的规范性和可读性至关重要,一个团队中如果每个开发者的代码风格各异,会给代码的维护、审查和协作带来极大的困难,这篇文章主... 目录前言如何安装与配置使用建议与技巧如何选择总结前言在 VS Code 中,有几款非常出色的 pyt

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l