Spring多模块项目从4.3.2.RELEASE升级到5.2.20.RELEASE后测试报错求助
解决Spring 5.2.20.RELEASE测试时SpringJUnit4ClassRunner初始化失败问题
你遇到的Could not initialize class org.springframework.test.context.junit4.SpringJUnit4ClassRunner错误,核心原因是依赖版本不兼容以及重复依赖导致的类加载冲突,以下是具体修复方案:
1. 清理重复的Spring Test依赖
你的pom中重复声明了spring-test依赖,保留其中一个并设置scope=test(仅测试阶段生效):
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version.d}</version> <scope>test</scope> </dependency>
2. 升级JUnit到兼容版本
Spring 5.2.x要求JUnit 4.12及以上版本,替换原有的JUnit依赖:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency>
3. 升级PowerMock到兼容版本
PowerMock 1.5.1与Spring 5.x存在兼容性问题,需升级到2.0.0+版本,同时注意与Mockito/EasyMock的版本匹配(示例使用PowerMock+Mockito组合,若需保留EasyMock需同步升级EasyMock到4.0+):
<!-- PowerMock 依赖 --> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <version>2.0.9</version> <scope>test</scope> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito2</artifactId> <version>2.0.9</version> <scope>test</scope> </dependency> <!-- 对应版本的 Mockito --> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>3.5.13</version> <scope>test</scope> </dependency>
注:若坚持使用EasyMock,替换
powermock-api-mockito2为powermock-api-easymock,并升级EasyMock到4.3版本。
4. 同步兼容Spring Data JPA版本
Spring 5.2.20.RELEASE对应Spring Data JPA 2.2.x版本,需确保${spring.data.jpa.version}设置为2.2.10.RELEASE:
<properties> <spring.data.jpa.version>2.2.10.RELEASE</spring.data.jpa.version> </properties>
5. 升级其他老旧依赖
- SLF4J:Spring 5.x要求SLF4J 1.7+,替换
slf4j-api版本:<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.36</version> </dependency> - Hibernate Validator:旧版本4.2.0.Final与Spring 5.x不兼容,升级到6.0.x:
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.22.Final</version> </dependency> - AspectJ:AspectJ 1.7.0与Spring 5.x的AOP模块不兼容,升级到1.9.6:
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjtools</artifactId> <version>1.9.6</version> </dependency>
最后验证
执行以下命令清理缓存并重新运行测试:
mvn clean test
内容的提问来源于stack exchange,提问作者Manohar Nr
相关产品推荐
相关产品推荐

