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

Mockito 5.0.0中@MockBean无法替换真实Bean的问题求助

解决Spring Boot 3.1(Mockito 5)下@MockBean注入真实Bean的问题

问题根源

你这情况是因为Spring Boot 3.1集成的Mockito 5,对JUnit扩展和Spring MockBean的初始化逻辑做了严格校验——之前Mockito 4里混用@ExtendWith(MockitoExtension.class)和@MockBean还能正常工作,但Mockito 5里两者的初始化顺序冲突,导致Spring的真实Bean覆盖了MockBean生成的mock对象。

直接解决方案:移除冗余的MockitoExtension注解

@SpringBootTest本身已经通过SpringExtension集成了Mockito的支持,完全能处理@MockBean、@SpyBean这些注解,不需要额外加@ExtendWith(MockitoExtension.class)。修改后的代码如下:

@AutoConfigureMockMvc
@SpringBootTest(classes = FakeApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ExceptionHandlerIT {

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    private ObjectMapper objectMapper;

    @MockBean
    private TestService testService;

    @Test
    void testRuntimeException() throws Exception {
        String errorMsg = "fake error";
        when(testService.testMethod())
                .thenThrow(new RuntimeException(errorMsg));
        // 后续的MockMvc请求断言逻辑
    }
}

其他可能的排查点

如果移除注解后还是有问题,可以检查这两点:

  • 检查TestService的真实Bean是否标记了@Primary:如果真实Bean是@Primary,Spring会优先注入它,这时候需要给@MockBean也加上@Primary来覆盖。
  • 检查是否有自定义的自动配置逻辑:某些条件注解(比如@ConditionalOnMissingBean)可能导致mock对象被跳过,优先初始化真实Bean。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:46:20