在测试阶段,运行 方法在 spring 上下文启动之前(运行 嵌入式服务在 spring 上下文初始化之前)
On a testing phase, run method before spring context starts (run embedded service before spring context initializes)
我有一个 spring 启动应用程序(spring boot 2.2.6),我正在尝试准备一个集成测试环境(嵌入在应用程序中);
我有一个初始化嵌入式弹性搜索服务的方法;
在测试阶段,我如何在 Spring 上下文开始初始化之前 运行 该方法?
当前,Spring 初始化并抱怨无法与嵌入式 elasticsearch 建立连接。
您可以创建自定义初始化程序:
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());
}
}
并将此初始化程序添加到您的测试中 class:
@ContextConfiguration(initializers = Initializer.class)
在 Spring Boot 2.2.6 和 Spring Framework 5.2.5 中可用还有一个额外的选项可以添加动态 属性
@DynamicPropertySource
static void dynamicProperties(DynamicPropertyRegistry registry) {
registry.add("spring.application.name", () -> "name");
}
这可用于设置任何类型的动态 属性,并且是 Initalizer 模式的替代品。
可以在 Spring 博客上看到更大的示例,
显示此示例结合 Testcontainers 为 docker 容器中 运行 的 Neo4J 设置动态数据库 URL,
@SpringBootTest
@Testcontainers
class ExampleIntegrationTests {
@Container
static Neo4jContainer<?> neo4j = new Neo4jContainer<>();
@DynamicPropertySource
static void neo4jProperties(DynamicPropertyRegistry registry) {
registry.add("spring.data.neo4j.uri", neo4j::getBoltUrl);
}
}
我有一个 spring 启动应用程序(spring boot 2.2.6),我正在尝试准备一个集成测试环境(嵌入在应用程序中); 我有一个初始化嵌入式弹性搜索服务的方法;
在测试阶段,我如何在 Spring 上下文开始初始化之前 运行 该方法? 当前,Spring 初始化并抱怨无法与嵌入式 elasticsearch 建立连接。
您可以创建自定义初始化程序:
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());
}
}
并将此初始化程序添加到您的测试中 class:
@ContextConfiguration(initializers = Initializer.class)
在 Spring Boot 2.2.6 和 Spring Framework 5.2.5 中可用还有一个额外的选项可以添加动态 属性
@DynamicPropertySource
static void dynamicProperties(DynamicPropertyRegistry registry) {
registry.add("spring.application.name", () -> "name");
}
这可用于设置任何类型的动态 属性,并且是 Initalizer 模式的替代品。
可以在 Spring 博客上看到更大的示例,
显示此示例结合 Testcontainers 为 docker 容器中 运行 的 Neo4J 设置动态数据库 URL,
@SpringBootTest
@Testcontainers
class ExampleIntegrationTests {
@Container
static Neo4jContainer<?> neo4j = new Neo4jContainer<>();
@DynamicPropertySource
static void neo4jProperties(DynamicPropertyRegistry registry) {
registry.add("spring.data.neo4j.uri", neo4j::getBoltUrl);
}
}