Springboot 3中,使用jacoco插件生成单元测试覆盖率报告

流水线部署中,单元测试覆盖率是一项考量的基本指标.本文介绍,在springboot3项目中,如何集成jacoco插件,以便在流水线SonarQube 中展示单元测试覆盖率报告.

主要注意的问题:

1.在引用依赖的时候,jmokit的依赖要先于junit的依赖。

java 复制代码
<!-- jmockit -->
		<dependency>
			<groupId>mockit</groupId>
			<artifactId>jmockit</artifactId>
			<version>${jmockit.version}</version>
			<scope>test</scope>
		</dependency>
		<!-- junit 5-->
		<dependency>
			<groupId>org.junit.platform</groupId>
			<artifactId>junit-platform-launcher</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter-engine</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.junit.vintage</groupId>
			<artifactId>junit-vintage-engine</artifactId>
			<scope>test</scope>
		</dependency>

2.surefire-maven-plugin,需要指定jmockit jar以及生成jacoco.exec位置,便于生成测试报告.

java 复制代码
<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<image>
						<builder>paketobuildpacks/builder-jammy-base:latest</builder>
					</image>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
			<!-- 配置Jacoco Maven插件 -->
			<plugin>
				<groupId>org.jacoco</groupId>
				<artifactId>jacoco-maven-plugin</artifactId>
				<version>${jacoco.version}</version>
				<configuration>
					<!-- jacoco生成报告时,排除和统计的文件 -->
					<excludes>
						<exclude>**/dto/**</exclude>
						<exclude>**/domain/**</exclude>
					</excludes>
					<includes>
						<include>**/service/**</include>
						<include>**/util/**</include>
					</includes>
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>prepare-agent</goal>
						</goals>
					</execution>
					<execution>
						<id>report</id>
						<phase>test</phase>
						<goals>
							<goal>report</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

			<!-- 配置Surefire插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>3.0.0-M7</version> <!-- 使用支持Spring Boot 3的Surefire版本 -->
				<configuration>
					<argLine>
						<!-- jdk 9 及以后,需要指定 jmockit-->
						-javaagent:${settings.localRepository}/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar
						<!-- 指定jacoco.exec的位置,用于生成jacoco报告 -->
						-javaagent:${settings.localRepository}/org/jacoco/org.jacoco.agent/${jacoco.version}/org.jacoco.agent-${jacoco.version}-runtime.jar=destfile=${project.basedir}/target/jacoco.exec
					</argLine>
				</configuration>
			</plugin>

更过,demo可以自行下载。

相关推荐
前端精髓7 小时前
NestJS 是什么(对着 Spring Boot 一起学习)
spring boot·后端·学习
武哥聊编程9 小时前
【AI实战项目】基于SpringAI+Springboot+Vue的AI面试刷题训练平台
vue.js·人工智能·spring boot·springai
vipxieliang10 小时前
固定电话验证详解:区号、号码、分机号的完整验证
java·spring boot
步行cgn10 小时前
Spring Boot 主入口类上的 @Enable 和 @Scan 注解详解
java·spring boot·后端
xixingzhe210 小时前
SpringBoot DDD 实战入门文档
spring boot·spring·ddd
杨运交12 小时前
[069][公共模块]Spring Boot 全局异常处理与参数校验实战(下):校验异常精细化处理与 WebFlux 适配
java·spring boot·后端
行者-全栈开发13 小时前
Spring Boot + FFmpeg 视频批量处理实战:压缩、HLS切片与异步任务引擎
spring boot·ffmpeg·异步处理·视频压缩·hls切片·批量任务·redis队列
Andya_net13 小时前
Spring Boot | 条件注解完全指南:从 @Conditional 到 @ConditionalOnExpression 的原理、实践与避坑
spring boot·后端·python
小荷才露尖尖角,早有蜻蜓立上头14 小时前
class java.util.LinkedHashMap cannot be cast to xxx
java·spring boot
MZA66615 小时前
Spring Boot 实战:基于自定义注解 + AOP 实现 Kafka 消息无侵入异步上送
java·spring boot·kafka