Я пишу тесты в Junit и использую Spring Boot Framework (который я новичок), и мне нужно использовать разные URL для тестирования разных сред. Поэтому я создал 2 файла ресурсов в дополнение к application.properties
1> application-dev.properties
2> application-stage.properties
Я создал компонент, для которого я установил значения свойств для чтения.
Наконец, в моем тестовом файле я помечаю тестовый класс с помощью: @ContextConfiguration(classes = {ComponentName.class})
Также в моемapplication.properties У меня есть эта строка: spring.profiles.active=dev
Ожидается: когда я распечатываю значение свойства класса Component, оно должно принимать значение из application-dev.properties
Actual: значение равно нулю, хотя мой бин успешно создан
Почему свойство не внедряется со значением из application-dev.properties?
Я перепробовал несколько статей от Baeldung (хотя немного сбивает с толку, статьи демонстрируют несколько методов, чтобы сделать то же самое, но не показывают 1 полную технику, чтобы сделать все до конца-end https://www.baeldung.com/spring-profiles
Я также пытался установить активный профиль несколькими способами:
a. Переменная env 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
Actual: значение равно нулю, хотя мой компонент успешно создан