0


Spring Boot升级后单元测试不生效

Spring Boot升级后单元测试不生效

背景

升级了Spring Boot到2.6.7版本之后,DT流水线没有跑过,查看CI日志应该是没有识别到单元测试用例,所有的单元测试都没有执行。本地执行mvn package命令的时候也没有跑单元测试。

问题原因

升级之前,项目使用的JUnit版本是4.13.2,spring-boot-starter-test的版本是2.3.12.RELEASE。是基于JUnit4的单元测试。Google一下,参考了部分文档,发现应该是升级了Spring Boot之后,在Spring Boot 2.4版本开始,junit-vintage-engine这个依赖已经从spring-boot-starter-test中移除了,而junit-vintage-engine这个依赖提供了在JUnit 5平台上运行JUnit3和JUnit4用例的支持。所以升级之后,我们使用的基于JUnit4实现的单元测试失效了。
在这里插入图片描述
2.3.12.RELEASE版本依赖:
在这里插入图片描述
2.6.7版本依赖:
在这里插入图片描述

解决方案

大概有两种解决方法,本次采用的是第一种。

方案一

方案一最简单,如果想继续使用JUnit4注解,可以将junit-vintage-engine依赖重新添加回来。具体依赖如下:

<!--适配spring boot升级 解决单元测试不生效的问题 --><dependency><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.hamcrest</groupId><artifactId>hamcrest-core</artifactId></exclusion></exclusions></dependency>

添加完成之后,单元测试生效,问题解决。

方案二

第二种方案就是切换到JUnit5,毕竟Spring Boot官方也已经将JUnit4支持的引擎依赖排除了,这边网上有很多关于JUnit4和JUnit5的差异的文章,我这边也参考贴一下,主要是一些注解的切换。
FeatureJUnit 4Junit 5声明一个测试方法(注解相同,类路径变化)

@Test
@Test

在当前类中的所有测试方法之前执行

@BeforeClass
@BeforeAll

在当前类中的所有测试方法之后执行

@AfterClass
@AfterAll

在每个测试方法之前执行

@Before
@BeforeEach

在每个测试方法之后执行

@After
@AfterEach

禁用测试方法/类

@Ignore
@Disabled

动态测试的测试工厂NA

@TestFactory

嵌套测试NA

@Nested

标记和过滤

@Category
@Tag

注册自定义扩展NA

@ExtendWith

替换部分注解之后,单元测试同样生效,问题解决。不过这种方法需要所有的单元测试用例,我们项目的工程比较多,就暂时没有采用,后续会考虑切换。

参考

https://www.baeldung.com/spring-boot-testing

https://www.baeldung.com/junit-5

https://howtodoinjava.com/junit5/junit-5-vs-junit-4


本文转载自: https://blog.csdn.net/qq_32238611/article/details/125191903
版权归原作者 洒脱的智障 所有, 如有侵权,请联系我们删除。

“Spring Boot升级后单元测试不生效”的评论:

还没有评论