You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot单元测试Mockito版本兼容报NoSuchMethodError问题求助

问题根因

你遇到的两类报错由两个独立问题叠加导致:

  1. 测试代码写法错误:@Autowired和@InjectMocks注解混用、Mock方法未打桩,导致初始的空指针异常
  2. 手动指定的Mockito版本与当前Spring Boot版本内置的测试依赖不兼容,导致后续全量测试时报NoSuchMethodError

解决步骤

第一步:修正测试代码错误

将测试代码调整为如下写法:

@SpringBootTest
public class LabelCacheTest {

    @MockBean
    private LabelRepository labelRepository;

    // 只保留@Autowired,删除@InjectMocks
    // @MockBean已经会自动将Mock实例注入Spring上下文管理的LabelServiceImpl中,不需要Mockito额外注入
    @Autowired
    private LabelServiceImpl labelService;

    @Test
    public void test_for_Cache() {
        // 必须给Mock方法打桩指定返回值,否则调用时会返回null,触发后续逻辑空指针
        List<Label> mockLabels = new ArrayList<>();
        // 按需构造测试数据,比如添加自定义的Label实例
        when(labelRepository.findAllLabels()).thenReturn(mockLabels);

        List<LabelDTO> resultFromDatabase = labelService.findAll();
        List<LabelDTO> resultFromCache = labelService.findAll();

        verify(labelRepository, times(1)).findAllLabels();
        assertEquals(resultFromDatabase, resultFromCache);
    }
}

第二步:解决Mockito版本冲突

  • 删掉pom.xml中手动添加的mockito-core依赖,直接使用spring-boot-starter-test内置的兼容版本即可,Spring Boot官方已经做好了版本适配,不会出现方法找不到的问题
  • 如果确实需要指定Mockito版本,需和当前Spring Boot版本的依赖声明保持一致:
    • 执行命令mvn dependency:tree | grep mockito查看当前Spring Boot管理的Mockito版本号
    • 手动指定的版本必须和上述查询到的版本完全一致
  • 清理本地Maven仓库中缓存的异常Mockito版本,执行mvn clean install重新构建项目即可

内容的提问来源于stack exchange,提问作者user16979464

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:39:05