我正在Junit中编写测试,并且正在使用Spring Boot Framework(这是我的新手),并且需要使用不同的url来测试不同的环境 因此,除了application.properties之外,我还创建了2个资源文件
1> application-dev.properties
2> application-stage.properties
我创建了一个组件,该组件设置了要读取的属性值。
最后在我的测试文件中,我用以下注释了测试类:
@ContextConfiguration(classes = {ComponentName.class})
在我的application.properties中,我也有这行:
spring.profiles.active=dev
预期: 当我打印出Component类的属性值时,应从application-dev.properties中获取该值
实际:该值是null,尽管我的bean已成功创建
为什么该属性未注入application-dev.properties中的值?
我已经尝试了Baeldung的几篇文章(尽管有点令人困惑,这些文章展示了多种方法来完成同一件事,但没有展示一种完整的技术来端对端地完成所有事情 https://www.baeldung.com/spring-profiles
我还尝试了多种设置活动配置文件的方法:
a。环境变量
b。使用@ActiveProfiles
批注
注意:这是一个测试项目(我正在尝试对网站进行自动测试,因此我所有的资源文件都位于src.test.resources
application.properties
#spring
https://ops.dev.website.us
spring.profiles.active=dev
url.sms=https://ops.default.website.us
application-dev.properties
url.sms=https://ops.dev.website.us
application-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);
}
}
预期:当我打印出Component类的属性值时,应从application-dev.properties中获取该值
实际:该值是null,尽管我的bean已成功创建
答案 0 :(得分:0)
您忘记了MyTest类的@SpringBootTest
注释。
@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
@RunWith(SpringRunner.class)
@SpringBootTest //add
@ContextConfiguration(classes = {DevEnvironment.class})
public class MyTest implements ApplicationContextAware {
//
}
我做得很好。