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

使用Java Record作为@ConfigurationProperties时单元测试实例化失败

解决Java Record作为Spring Boot配置属性的单元测试失败问题

你的问题出在单元测试上下文的配置逻辑上:当使用@SpringJUnitConfig(DbConfig.class)时,Spring会把DbConfig当作普通Bean处理,尝试通过构造函数注入三个String类型的依赖,但这些String并没有被注册为Spring Bean,因此抛出找不到对应Bean的错误。而普通类因为有setter方法,Spring可以通过属性绑定的方式直接填充值,不需要依赖构造注入,所以测试能正常运行。

解决方案1:使用@SpringBootTest启动完整Spring Boot上下文

直接改用@SpringBootTest注解,它会自动启用Spring Boot的配置属性绑定机制,正确识别DbConfig作为配置属性类:

@TestPropertySource(locations = "classpath:application-test.properties")
@SpringBootTest(classes = DbConfig.class)
class DbConfigTest {

    @Autowired
    DbConfig dbConfig;

    @Test
    void shouldReturnExecutorCorrectly() {
        assertEquals("localhost", this.dbConfig.url());
        assertEquals("Hello", this.dbConfig.username());
        assertEquals("Password", this.dbConfig.password());
    }
}

解决方案2:自定义测试配置类

创建一个包含@EnableConfigurationProperties的配置类,让Spring正确处理DbConfig的配置属性绑定逻辑:

首先定义测试配置类:

@Configuration
@EnableConfigurationProperties(DbConfig.class)
public class TestConfig {
}

然后修改测试类加载这个配置类:

@TestPropertySource(locations = "classpath:application-test.properties")
@SpringJUnitConfig(TestConfig.class)
class DbConfigTest {

    @Autowired
    DbConfig dbConfig;

    @Test
    void shouldReturnExecutorCorrectly() {
        assertEquals("localhost", this.dbConfig.url());
        assertEquals("Hello", this.dbConfig.username());
        assertEquals("Password", this.dbConfig.password());
    }
}

解决方案3:在测试类上直接启用配置属性

在测试类上添加@EnableConfigurationProperties注解,配合@SpringJUnitConfig使用:

@TestPropertySource(locations = "classpath:application-test.properties")
@SpringJUnitConfig
@EnableConfigurationProperties(DbConfig.class)
class DbConfigTest {

    @Autowired
    DbConfig dbConfig;

    @Test
    void shouldReturnExecutorCorrectly() {
        assertEquals("localhost", this.dbConfig.url());
        assertEquals("Hello", this.dbConfig.username());
        assertEquals("Password", this.dbConfig.password());
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 21:35:28