Значения, не переданные в Компонент из application-dev.properties - PullRequest
0 голосов
/ 26 апреля 2019

Я пишу тесты в 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?

  1. Я перепробовал несколько статей от Baeldung (хотя немного сбивает с толку, статьи демонстрируют несколько методов, чтобы сделать то же самое, но не показывают 1 полную технику, чтобы сделать все до конца-end https://www.baeldung.com/spring-profiles

  2. Я также пытался установить активный профиль несколькими способами:

    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: значение равно нулю, хотя мой компонент успешно создан

1 Ответ

0 голосов
/ 26 апреля 2019

Вы забыли @SpringBootTest аннотацию к классу MyTest.

@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
@RunWith(SpringRunner.class)
@SpringBootTest //add
@ContextConfiguration(classes = {DevEnvironment.class})
public class MyTest implements ApplicationContextAware {
 //
}

Я отлично с этим работал.

ссылка:
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html#boot-features-testing-spring-boot-applications

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...