网站建设与管理策划书,创造你魔法官方网站起做欢的事,微信小程序开发模板网站,wordpress 好用吗1.什么是jacoco#xff1f;
JaCoCo#xff0c;即 Java Code Coverage#xff0c;是一款开源的 Java 代码覆盖率统计工具。支持 Ant 、Maven、Gradle 等构建工具#xff0c;支持 Jenkins、Sonar 等持续集成工具#xff0c;支持 Java Agent 技术远程监控 Java 程序运行情况…1.什么是jacoco
JaCoCo即 Java Code Coverage是一款开源的 Java 代码覆盖率统计工具。支持 Ant 、Maven、Gradle 等构建工具支持 Jenkins、Sonar 等持续集成工具支持 Java Agent 技术远程监控 Java 程序运行情况支持Eclipse、IDEA等IDE提供HTMLCSV 等格式的报表导出轻量级实现对外部库和系统资源的依赖性小性能开销小。 JaCoCo 支持从 JDK1.0 版本到 JDK1.8 版本 的 Java 类文件。但是JaCoCo 工具所需的JRE 版本最小为 1.5。另外1.6及以上版本的测试中的类文件必须包含有效的堆栈映射帧。
它有以下功能特性
指令C0、分支C1、行、方法、类型和圈复杂度的覆盖分析。基于 Java 字节码因此也可以在没有源文件的情况下工作。通过基于实时检测的Java 代理进行简单集成。通过 API 可以实现其他集成场景例如自定义类加载器。与框架无关基于 Java VM 的应用程序都可以顺利集成例如普通 Java 程序、OSGi 框架、Web 容器或 EJB 服务器。与所有已发布的 Java 类文件版本兼容。支持不同 JVM 语言。多种报告格式HTML、XML、CSV。在任何时间点可以使用远程协议和 JMX 控制从覆盖代理请求执行数据转储。用于收集和管理执行数据并创建结构化覆盖率报告的Ant 任务。Maven 插件用于收集覆盖信息并在 Maven 构建中创建报告。
非功能特性
简单的使用和与现有构建脚本和工具的集成。良好的性能最小的运行时开销尤其是对于大型项目。对外部库和系统资源的依赖最小的轻量级实现。综合文档。完整的API文档JavaDoc和 其他工具集成的示例。基于JUnit 测试用例的完整功能测试覆盖的回归测试。 2.代码工程
实验目标
实验单元测试覆盖率检测
pom.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdspringboot-demo/artifactIdgroupIdcom.et/groupIdversion1.0-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdjacoco/artifactIdpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.target/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-autoconfigure/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.jacoco/groupIdartifactIdjacoco-maven-plugin/artifactIdversion0.8.6/versionexecutionsexecutiongoalsgoalprepare-agent/goal/goals/executionexecutionidjacoco-report/idphasetest/phasegoalsgoalreport/goal/goals/executionexecutionidjacoco-check/idgoalsgoalcheck/goal/goalsconfigurationrulesruleelementPACKAGE/elementlimitslimitcounterLINE/countervalueCOVEREDRATIO/valueminimum0.0/minimum/limit/limits/rule/rules/configuration/execution/executions/pluginplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-surefire-plugin/artifactIdversion3.0.0-M5/versionconfigurationforkedProcessExitTimeoutInSeconds60/forkedProcessExitTimeoutInSecondsforkCount1/forkCount/configuration/plugin/plugins/build
/project
controller
package com.et.jacoco.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;RestController
public class HelloWorldController {RequestMapping(/hello)public MapString, Object showHelloWorld(){MapString, Object map new HashMap();map.put(msg, HelloWorld);return map;}
}
测试类
package com.et.jacoco;import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;import static org.hamcrest.core.StringContains.containsString;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;ExtendWith(SpringExtension.class)
WebMvcTest
AutoConfigureMockMvc
public class HelloControllerTest {Autowiredprivate MockMvc mvc;Testpublic void getHello() throws Exception {mvc.perform(MockMvcRequestBuilders.get(/hello).accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andExpect(content().string(containsString(HelloWorld)));}
}
以上只是一些关键代码所有代码请参见下面代码仓库
代码仓库
GitHub - Harries/springboot-demo: a simple springboot demo with some components for example: redis,solr,rockmq and so on.
3.测试
执行mvn clean test 会自动在项目目录target/site/jacoco/index.html 即可查看到图形化的测试报告如下 点击链接你可以查看每个类的代码覆盖情况如下 四.总结
本文简单介绍 JaCoCo 最基本使用和上手希望你可以通过官网探索更多的高级功能,关于覆盖率给你一些建议
覆盖率指标大多数情况下仅作为参考不要用它作为考核指标不要过于追求覆盖率指标100% 的覆盖率也不能代表你的项目没有 BUG
4.引用
https://www.jacoco.org/jacoco/trunk/doc/index.htmlSpring Boot集成jacoco实现单元测试覆盖统计 | Harries Blog™