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

Junit5中如何Mock或测试CMSConfig接口并解决注入实例为null问题

问题根因

  1. 你当前使用的@ExtendWith(MockitoExtension.class)仅支持Mockito原生的@Mock、@InjectMocks、@Spy等注解,既不识别Spring的@Autowired注解,也不会处理自定义的@ManagedConfiguration注解,所以两个字段会出现null。
  2. CMSConfig是接口类型,本身没有实现类,要么通过Mockito生成Mock代理实例,要么启动Spring上下文让CMS框架生成对应动态代理Bean。

可选解决方案

方案一:纯Mockito单元测试(无需启动Spring,执行速度快,适合测试业务逻辑)

如果你只需要测试MockitoService的业务逻辑,不需要验证CMS配置的实际加载效果,用这个方案即可:

@ExtendWith(MockitoExtension.class)
public class MockitoServiceTest {

  // 自动实例化被测类,将标注了@Mock的依赖注入进去
  @InjectMocks
  private MockitoService mockitoService;

  // Mock CMSConfig接口的代理实例
  @Mock
  private CMSConfig cmsConfig;

  @Test
  public void testMethod() {
    // 打桩定义CMS方法返回值
    when(cmsConfig.getSomeConfig()).thenReturn("测试配置值");
    // 执行测试方法
    String result = mockitoService.method();
    // 校验结果
    assertEquals("Hello!测试配置值", result);
  }
}

方案二:Spring上下文集成测试(适合验证CMS配置实际加载逻辑)

如果你需要验证CMS框架是否能正确读取配置并注入到CMSConfig实例中,需要启动Spring测试上下文:

@ExtendWith(SpringExtension.class)
// 如果是SpringBoot项目直接加@SpringBootTest,否则指定你的Spring配置类
@SpringBootTest
public class MockitoServiceTest {

  @Autowired
  private MockitoService mockitoService;

  @Autowired
  private CMSConfig cmsConfig;

  @BeforeAll
  public static void before() {
    // 建议测试配置放在test/resources目录下,和生产配置隔离
    System.setProperty("cms.configs.dir", Paths.get("src", "test", "resources").toFile().getAbsolutePath());
  }

  @Test
  public void testCMSConfigLoad() {
    // 校验实际加载的配置值是否符合预期
    assertEquals(cmsConfig.getSomeConfig(),"你期望的配置值");
  }

  @Test
  public void testServiceMethod() {
    String result = mockitoService.method();
    assertEquals("Hello!你期望的配置值", result);
  }
}

注意:你原测试代码中调用的getDummy()方法在贴出的CMSConfig接口中没有定义,需要确认是笔误还是确实存在该方法,避免编译报错。
使用方案二需要确保你的CMS框架自带Spring自动配置逻辑,能识别@ManagedConfiguration注解并为CMSConfig接口生成动态代理Bean注入到Spring上下文。如果没有相关自动配置,需要手动编写配置类注册CMSConfig的代理实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:24:04