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

单元测试注入@ConstructorBinding修饰的不可变ConfigurationProperties报错如何解决

报错根因

报错的核心原因是你的测试配置没有触发配置属性绑定逻辑,Spring将KeycloakConfigurationProperties识别为普通构造注入Bean,尝试从容器中查找构造方法所需的4个String类型参数,容器中没有对应Bean就抛出了该异常。


解决方案

方案1:基于@SpringBootTest调整配置

修改测试类注解,明确指定要注册的配置属性类,同时确保配置文件能被正确加载:

  • 如果你希望加载src/test/resources下的yaml配置,测试类写法如下:
@SpringBootTest
@EnableConfigurationProperties(KeycloakConfigurationProperties.class)
// 如果你的配置文件命名为application-test.yaml,需加下面注解激活test profile
// @ActiveProfiles("test")
class KeycloakTest {

  @MockBean
  Keycloak keycloak;

  @Autowired
  KeycloakConfigurationProperties keycloakConfigurationProperties;
}
  • 如果你不想单独维护测试配置文件,可以直接把参数内联到注解中:
@SpringBootTest(properties = {
    "keycloak.auth-server-url=http://localhost:8081/auth",
    "keycloak.realm=master",
    "keycloak.client-id=foo-service",
    "keycloak.client-secret=2f217834-1c44-4c2f-a0f1-19ff0d0bd73d"
})
@EnableConfigurationProperties(KeycloakConfigurationProperties.class)
class KeycloakTest {

  @MockBean
  Keycloak keycloak;

  @Autowired
  KeycloakConfigurationProperties keycloakConfigurationProperties;
}

方案2:使用专用配置属性测试注解(Spring Boot 2.6+推荐)

Spring Boot提供了@ConfigurationPropertiesTest切片测试注解,专门用于测试配置属性类,比@SpringBootTest更轻量,会自动装配配置绑定相关的组件:

@ConfigurationPropertiesTest(KeycloakConfigurationProperties.class)
// 同样如果用test后缀的配置文件可加@ActiveProfiles("test")
class KeycloakTest {

  @MockBean
  Keycloak keycloak;

  @Autowired
  KeycloakConfigurationProperties keycloakConfigurationProperties;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:09:03