SpringBoot Mockito测试出现MockitoSessionBuilder NoSuchMethodError求助
错误根因
该错误是Mockito核心包版本与Mockito-JUnit5扩展版本不匹配导致:
- Spring Boot 2.4.2默认管理的Mockito版本为3.6.28,配套的Mockito-Jupiter扩展可以正常调用
mockitoSession()方法 - 你手动在maven-surefire-plugin中添加了版本为1.0.1的
junit-platform-surefire-provider依赖,该版本属于JUnit5早期版本,会拉取低版本的Mockito相关依赖,覆盖了Spring Boot默认的兼容版本,最终触发方法找不到的异常 - 测试类上的
@RunWith(JUnitPlatform.class)是JUnit4运行JUnit5测试的兼容注解,额外增加了运行时的兼容风险
解决步骤
- 清理maven-surefire-plugin的冗余依赖
删除插件下的junit-platform-surefire-provider依赖配置,Spring Boot 2.4+已经内置了适配好的测试插件配置,无需手动添加该依赖:
<plugin> <artifactId>maven-surefire-plugin</artifactId> <!-- 移除内部的junit-platform-surefire-provider依赖即可 --> </plugin>
- (可选)显式锁定Mockito兼容版本
如果存在其他第三方依赖拉取低版本Mockito的情况,可以在pom的properties节点中手动指定匹配版本:
<properties> <java.version>15</java.version> <!-- 和Spring Boot 2.4.2默认配套的Mockito版本 --> <mockito.version>3.6.28</mockito.version> </properties>
- 移除测试类的冗余注解
删除@RunWith(JUnitPlatform.class)注解,仅保留JUnit5原生的扩展注解即可:
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) public class UserServiceTest { @Test public void testUserServiceCreation() { // 测试逻辑 } }
- 刷新依赖缓存
执行mvn clean install命令清理本地旧依赖,重新拉取匹配版本的依赖后即可正常运行测试。
内容的提问来源于stack exchange,提问作者Ezani
相关产品推荐
相关产品推荐

