未从应用程序传递到组件的值-dev.properties
Values not passed into Component from application-dev.properties
我正在 Junit 中编写测试并正在使用 Spring Boot Framework(我是新手)并且需要使用不同的 url 来测试不同的环境
因此,除了 application.properties
之外,我还创建了 2 个资源文件
1> application-dev.properties
2> application-stage.properties
我创建了一个组件,我设置了要读入的 属性 值。
最后,在我的测试文件中,我用以下内容对测试 Class 进行注释:
@ContextConfiguration(classes = {ComponentName.class})
我的 application.properties 中也有这一行:
spring.profiles.active=dev
预计:
当我打印出组件 class 的 属性 的值时,它应该从 application-dev.properties
中获取值
实际:值为null,虽然我的bean创建成功
为什么 属性 没有被注入来自 application-dev.properties 的值?
我试过 Baeldung 的几篇文章(虽然有点令人困惑,这些文章展示了多种方法来做同样的事情,但没有展示一种完整的技术来完成所有端到端的事情
https://www.baeldung.com/spring-profiles
我也尝试过以多种方式设置活动配置文件:
一个。环境变量
b.使用@ActiveProfiles
注解
注意:这是一个测试项目(我正在尝试自动化测试一个网站,所以我所有的资源文件都在 src.test.resources
application.properties
#spring
https://ops.dev.website.us
spring.profiles.active=dev
url.sms=https://ops.default.website.us
应用-dev.properties
url.sms=https://ops.dev.website.us
申请-stage.properties
url.sms=https://ops.stage.website.us
组件文件
@Component
@ConfigurationProperties(prefix = "url")
public class DevEnvironment {
private String sms;
public String getSms() {
return sms;
}
public void setSms(String sms) {
this.sms = sms;
}
}
测试文件
@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {DevEnvironment.class})
public class MyTest implements ApplicationContextAware {
@Autowired
private ConfigurableEnvironment env;
private DevEnvironment devEnvironment;
String url;
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
System.out.println("Active profiles:" + env.getActiveProfiles()[0]);
devEnvironment = context.getBean(DevEnvironment.class);
//System.out.println("from set app context:" + devEnvironment.getSms());
url = devEnvironment.getSms();
}
@Test
public void testSms(){
System.out.println("inside test url:" +url);
}
}
预期:当我打印出组件 class 的 属性 的值时,它应该从 application-dev.properties
中获取值
实际:值为null,虽然我的bean创建成功
您忘记了对 MyTest class 的 @SpringBootTest
注释。
@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
@RunWith(SpringRunner.class)
@SpringBootTest //add
@ContextConfiguration(classes = {DevEnvironment.class})
public class MyTest implements ApplicationContextAware {
//
}
我用这个很好。
我正在 Junit 中编写测试并正在使用 Spring Boot Framework(我是新手)并且需要使用不同的 url 来测试不同的环境 因此,除了 application.properties
之外,我还创建了 2 个资源文件1> application-dev.properties
2> application-stage.properties
我创建了一个组件,我设置了要读入的 属性 值。
最后,在我的测试文件中,我用以下内容对测试 Class 进行注释:
@ContextConfiguration(classes = {ComponentName.class})
我的 application.properties 中也有这一行:
spring.profiles.active=dev
预计: 当我打印出组件 class 的 属性 的值时,它应该从 application-dev.properties
中获取值实际:值为null,虽然我的bean创建成功
为什么 属性 没有被注入来自 application-dev.properties 的值?
我试过 Baeldung 的几篇文章(虽然有点令人困惑,这些文章展示了多种方法来做同样的事情,但没有展示一种完整的技术来完成所有端到端的事情 https://www.baeldung.com/spring-profiles
我也尝试过以多种方式设置活动配置文件:
一个。环境变量 b.使用
@ActiveProfiles
注解
注意:这是一个测试项目(我正在尝试自动化测试一个网站,所以我所有的资源文件都在 src.test.resources
application.properties
#spring
https://ops.dev.website.us
spring.profiles.active=dev
url.sms=https://ops.default.website.us
应用-dev.properties
url.sms=https://ops.dev.website.us
申请-stage.properties
url.sms=https://ops.stage.website.us
组件文件
@Component
@ConfigurationProperties(prefix = "url")
public class DevEnvironment {
private String sms;
public String getSms() {
return sms;
}
public void setSms(String sms) {
this.sms = sms;
}
}
测试文件
@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {DevEnvironment.class})
public class MyTest implements ApplicationContextAware {
@Autowired
private ConfigurableEnvironment env;
private DevEnvironment devEnvironment;
String url;
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
System.out.println("Active profiles:" + env.getActiveProfiles()[0]);
devEnvironment = context.getBean(DevEnvironment.class);
//System.out.println("from set app context:" + devEnvironment.getSms());
url = devEnvironment.getSms();
}
@Test
public void testSms(){
System.out.println("inside test url:" +url);
}
}
预期:当我打印出组件 class 的 属性 的值时,它应该从 application-dev.properties
中获取值实际:值为null,虽然我的bean创建成功
您忘记了对 MyTest class 的 @SpringBootTest
注释。
@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
@RunWith(SpringRunner.class)
@SpringBootTest //add
@ContextConfiguration(classes = {DevEnvironment.class})
public class MyTest implements ApplicationContextAware {
//
}
我用这个很好。