java - 如何使用 @ConfigurationProperties 和 @Autowired 测试类

标签 java properties spring-boot

我想测试依赖于 @Autowired@ConfigurationProperties 加载的属性的应用程序的一小部分。我正在寻找一种仅加载所需属性而不总是加载整个 ApplicationContext 的解决方案。 这里作为简化示例:

@TestPropertySource(locations = "/SettingsTest.properties")
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestSettings.class, TestConfiguration.class})
public class SettingsTest {
    @Autowired
    TestConfiguration config;

    @Test
    public void testConfig(){
        Assert.assertEquals("TEST_PROPERTY", config.settings().getProperty());
    }
}

配置类:

public class TestConfiguration {
    @Bean
    @ConfigurationProperties(prefix = "test")
    public TestSettings settings (){
        return new TestSettings();
    }
}

设置类:

public class TestSettings {
    private String property;

    public String getProperty() {
        return property;
    }

    public void setProperty(String property) {
        this.property = property;
    }
}

资源文件夹中的属性文件包含条目:

test.property=TEST_PROPERTY

在我当前的设置中,配置不为空,但没有可用的字段。 字段不是字段的原因应该与我没有使用 Springboot 而是使用 Spring 的事实有关。 那么 Springboot 的运行方式是什么?

编辑: 我想这样做的原因是:我有一个解析文本文件的解析器,使用的正则表达式存储在一个属性文件中。 为了对此进行测试,我只想加载此解析器所需的属性,这些属性位于 TestSettings 上方的示例中。

在阅读评论时,我已经注意到这不再是单元测试了。然而,为这个小测试使用完整的 Spring 引导配置对我来说似乎有点太多了。这就是为什么我问是否有可能只加载一个具有属性的类。

最佳答案

您需要使用 @EnableConfigurationProperties 注释您的 TestConfiguraion,如下所示:

@EnableConfigurationProperties
public class TestConfiguration {

    @Bean
    @ConfigurationProperties(prefix = "test")
    public TestSettings settings (){
        return new TestSettings();
    }
}

另外你只需要在你的SettingsTest类的@ContextConfiguration中包含TestConfiguration.class:

@TestPropertySource(locations = "/SettingsTest.properties")
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestConfiguration.class)
public class SettingsTest {
...

关于java - 如何使用 @ConfigurationProperties 和 @Autowired 测试类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31745168/

相关文章:

java - 在 Spring 中使用事务时创建提交后

java - 创建一个文本文件,读取并比较其中的整数

c# - 在内部使用属性有什么好处?

c# - 如何在字符串中自动显示类的所有属性及其值?

java - 使用 eirslett :frontend-maven-plugin 在 gitlab.com 上运行 maven build

java - 如何在 JPQL 中创建 "findByDate"NamedQuery?

java - 管理和加载属性的最佳实践

asynchronous - 如何使用 Spring Boot 向 Controller 实现异步 REST 请求?

spring-boot - Spring boot 在服务中运行相同配置文件的多个实例

java - 映射注释有什么用?我需要它吗?(Spring Data ElasticSearch)