gpt4 book ai didi

testing - 在 Spring Boot 测试期间替换 @Configuration 中的 @Value 属性

转载 作者:行者123 更新时间:2023-11-28 19:45:25 24 4
gpt4 key购买 nike

场景

我有一个带有 @Configuration 注释的 Spring 配置类的 Spring Boot 应用程序,它包含一些 @Value 注释字段。为了进行测试,我想用自定义测试值替换这些字段值。

不幸的是,这些测试值不能使用简单的属性文件、(String) 常量或类似文件来覆盖,相反,我必须使用一些自定义的书面属性解析 Java 类(例如 TargetProperties.getProperty( "some.username")).

我遇到的问题是,当我将自定义 PropertySource 添加到测试配置中的 ConfigurableEnvironment 时,已经太晚了,因为此 PropertySource 将被添加到之后,例如RestTemplate 已创建。

问题

我如何覆盖 @Value 带注释的字段 within @Configuration 类具有通过自定义以编程方式获取的属性Java 代码其他任何东西被初始化之前?

代码

生产配置类

@Configuration
public class SomeConfiguration {

@Value("${some.username}")
private String someUsername;

@Value("${some.password}")
private String somePassword;

@Bean
public RestTemplate someRestTemplate() {
RestTemplate restTemplate = new RestTemplate();

restTemplate.getInterceptors().add(
new BasicAuthorizationInterceptor(someUsername, somePassword));

return restTemplate;
}

}

测试配置类

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class SomeTest {

@SpringBootConfiguration
@Import({MySpringBootApp.class, SomeConfiguration.class})
static class TestConfiguration {

@Autowired
private ConfigurableEnvironment configurableEnvironment;

// This doesn't work:

@Bean
@Lazy(false)
// I also tried a @PostConstruct method
public TargetPropertiesPropertySource targetPropertiesPropertySource() {
TargetPropertiesPropertySource customPropertySource =
new TargetPropertiesPropertySource();
configurableEnvironment.getPropertySources().addFirst(customPropertySource);
return customPropertySource;
}
}
}

最佳答案

您可以使用 properties 参数直接在 @SpringBootTest 注释中覆盖属性:

@SpringBootTest(properties = {"some.username=user", "some.password=pwd"},
webEnvironment = SpringBootTest.WebEnvironment.NONE)

关于testing - 在 Spring Boot 测试期间替换 @Configuration 中的 @Value 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39396118/

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