gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:14:50 30 4
gpt4 key购买 nike

我想测试依赖于 @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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com