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

相关文章

IDEA中新建/切换Git分支的实现步骤

《IDEA中新建/切换Git分支的实现步骤》本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了... 前提:项目已被Git托管1、点击上方栏Git->NewBrancjsh...2、输入新的分支的

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构