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

Junit5 Jupiter环境下@Autowired注解失效无法注入依赖问题求助

问题核心原因

  • 同时混用MockitoExtension和SpringExtension,且@InjectMocks不会将Spring容器中注入的formatBO注入到自己实例化的DetailsServiceImpl对象中,仅会注入Mockito管理的mock/spy对象
  • JUnit5不需要加@RunWith(JUnitPlatform.class)注解,该注解是JUnit4适配JUnit5平台的过渡注解,会导致扩展加载冲突
  • 你手动实例化了DetailsServiceImpl service = new DetailsServiceImpl(),该对象不受Spring容器管理,所以Spring不会自动注入它内部的formatBO属性

注意:你当前测试方法中调用的service.fetchBasicDetails(bean)和你提供的Service类中实际存在的fetchChargeDetails方法名不一致,请检查是否为笔误,避免出现方法不存在的报错。


解决方案1:基于Spring测试上下文(保留@Autowired能力)

直接把测试类改成完全受Spring管理,去掉MockitoExtension的混用,代码修改如下:

// 只保留SpringExtension,JUnit5不需要@RunWith
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {FormatBO.class, Mapper.class, DetailsServiceImpl.class})
public class SimpleImplTest {
    
    @MockBean
    Mapper mapper;

    @Autowired
    FormatBO formatBO;
    
    // 直接从Spring容器注入Service,不要自己new
    @Autowired
    private DetailsServiceImpl service;
    
    TestBean bean;
    
    @BeforeEach
    public void initData() {
        bean = new TestBean();
        bean.setCategoryId("1");
    }

    @Test
    public void getBasicDetailsTest(){
        // 补全你需要的测试逻辑和断言即可
        service.fetchChargeDetails(bean);
    }
}

修改后Spring容器会自动注入DetailsServiceImpl内部的formatBO,不会再出现空指针。


解决方案2:纯Mockito实现(不需要启动Spring上下文,执行更快)

如果不需要依赖Spring容器的其他能力,可以完全用Mockito做注入,不需要SpringExtension,修改如下:

// 只保留MockitoExtension
@ExtendWith(MockitoExtension.class)
public class SimpleImplTest {
    
    // 把Mapper改成@Mock即可
    @Mock
    Mapper mapper;

    // 要注入到service里的真实对象用@Spy修饰
    @Spy
    FormatBO formatBO = new FormatBO();
    
    @InjectMocks
    private DetailsServiceImpl service;
    
    TestBean bean;
    
    @BeforeEach
    public void initData() {
        bean = new TestBean();
        bean.setCategoryId("1");
    }

    @Test
    public void getBasicDetailsTest(){
        // 补全你需要的测试逻辑和断言即可
        service.fetchChargeDetails(bean);
    }
}

这种方案不需要启动Spring上下文,测试执行速度更快,适合单测仅验证Service逻辑的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:57:00