На этапе тестирования запускайте метод до запуска контекста Spring (запускайте встроенную службу до инициализации контекста Spring) - PullRequest
0 голосов
/ 07 мая 2020

У меня есть приложение весенней загрузки (весенняя загрузка 2.2.6), и я пытаюсь подготовить среду интеграционных тестов (встроенную в приложение); У меня есть метод, который инициализирует встроенную службу elasticsearch;

На этапе тестирования, как я могу запустить этот метод до начала инициализации Spring Context? В настоящее время Spring инициализируется и жалуется, что не может sh установить соединение со встроенным elasticsearch.

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

вы можете создать собственный инициализатор:

static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {

        @Override
        public void initialize(ConfigurableApplicationContext configurableApplicationContext) {

            // initialize...

            TestPropertyValues
                    //here you can add properties to connect...
                    .of("some.property.key=some.property.value")
                    .applyTo(configurableApplicationContext.getEnvironment());
        }

}

и добавить этот инициализатор в свой тестовый класс:

@ContextConfiguration(initializers = Initializer.class)
1 голос
/ 07 мая 2020

Доступно в Spring Boot 2.2.6 и Spring Framework 5.2.5, есть дополнительная опция для добавления свойства Dynami c

    @DynamicPropertySource
    static void dynamicProperties(DynamicPropertyRegistry registry) {
        registry.add("spring.application.name", () -> "name");
    }

Это можно использовать для настройки любого типа Dynami c свойство и является заменой шаблона инициализатора.

Более крупный пример можно увидеть в блоге Spring,

https://spring.io/blog/2020/03/27/dynamicpropertysource-in-spring-framework-5-2-5-and-spring-boot-2-2-6

Здесь показан этот пример в сочетании с Testcontainers для установки URL-адреса базы данных Dynami c для Neo4J, который работает в контейнере docker,

@SpringBootTest
@Testcontainers
class ExampleIntegrationTests {

    @Container
    static Neo4jContainer<?> neo4j = new Neo4jContainer<>();

    @DynamicPropertySource
    static void neo4jProperties(DynamicPropertyRegistry registry) {
        registry.add("spring.data.neo4j.uri", neo4j::getBoltUrl);
    }

}
...