SpringBootTest для произвольного класса конфигурации приложения для проверки чтения приложения.файл yml

#java #spring #spring-boot #groovy #spring-boot-test

Вопрос:

Я хотел бы узнать, как написать SpringBootTest для существующего класса конфигурации приложения с целью тестирования функциональности чтения приложения.файл yml. Я был бы доволен java или groovy. Я не могу поделиться существующим классом конфигурации приложения, поэтому я с радостью приму любой предложенный пример, который начинается с существующей конфигурации приложения, которая читается в приложении.файл yml и анализирует данные в этом файле для объектов, которым необходимо получить конфигурации.

На сегодняшний день то, что я прочитал до сих пор, не помогло мне понять, как это сделать, и я здесь со шляпой в руке, прося о некоторой помощи. Я понимаю некоторые основные концепции Spring Boot и тестирования Spring Boot, но на самом деле подключение его с нуля для выполнения этой конкретной задачи дает мне понять, что мне не хватает чего-то важного в подходе к тому, как это сделать.

Если вы хотите потратить время, чтобы объяснить мне это, это здорово, но я, конечно, не ожидаю, что вы проведете новичка с весенней загрузкой через этот материал, если вы видели документацию в Интернете, учебные пособия или даже видео, которые подходят для этой задачи.

На сегодняшний день ресурсы, которые я нашел, не заполнили этот недостающий пробел, который позволил бы мне перейти от существующего класса конфигурации приложений к созданию нового класса тестов конфигурации приложений из него. Сама документация Spring, похоже, замалчивает некоторые вещи, такие как: минимальные требования.

Ответ №1:

Я полагаю, что у вас есть application.yml .
Например, вы определили некоторые свойства системы очереди сообщений.

 mq:
  receive_channel: "RES"
  send_channel: "REQ"
 

Прежде всего, вы должны определить класс, который представляет связанные значения, которые вы поместили в свой .yml файл.

 public class MQProperties {
    private String receive_channel;
    private String send_channel;
    // getter and setters
}
 

Во-вторых, вы должны определить класс конфигурации, как показано ниже.

 @Configuration
@PropertySource(value = "classpath:application.yml")
public class ApplicationConfigurationProperties {

    @Bean
    @ConfigurationProperties(prefix = "mq")
    public MQProperties mqProperties() {
        return new MQProperties();
    }
}
 

Наконец, в своем тестовом классе вы проверяете значение свойств.

 @RunWith(SpringRunner.class)
@SpringBootTest
public class PropertiesTest {

    @Value("${mq.receive_channel}")
    private String mqReceiveChannel;
    @Value("${mq.send_channel}")
    private String mqSendChannel;

    @Autowired
    private ApplicationConfigurationProperties configurationProperties;

    @Test
    public void get_mq_receive_channel() { 
     assertThat(configurationProperties.mqProperties().getReceive_channel()).isEqualTo(mqReceiveChannel);
    }

    @Test
    public void get_mq_send_channel() {  
     assertThat(configurationProperties.mqProperties().getSend_channel()).isEqualTo(mqSendChannel);
    }
}
 

Комментарии:

1. Спасибо. Это закрепляет некоторые концепции, которые, как я подозревал / которые, как мне казалось, я понимал, но не видел так хорошо собранными раньше. Я с радостью поддержу этот ответ, когда смогу это сделать. Вы прекрасно изложили основные предположения, некоторые из которых я мог бы / должен был сформулировать, но вы проделали замечательную работу. Это позволяет достичь цели сбора полного минимума того, что необходимо установить для создания теста конфигурации приложения, загружающего существующее приложение. файл yml.