如何在 @ContextConfiguration 初始化程序之前启动 kafka 测试容器?
Posted
技术标签:
【中文标题】如何在 @ContextConfiguration 初始化程序之前启动 kafka 测试容器?【英文标题】:How to start kafka test container before @ContextConfiguration initializers? 【发布时间】:2020-02-18 16:10:59 【问题描述】:我想启动 kafka 测试容器并获取它的引导服务器:
@SpringBootTest
@ContextConfiguration(classes = TestConfig.class, MyApplication.class, initializers = MyIntegrationTest.Initializer.class)
@Testcontainers
public class MyIntegrationTest
@Container
private static final KafkaContainer KAFKA = new KafkaContainer();
static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext>
@Override
public void initialize(@NotNull ConfigurableApplicationContext configurableApplicationContext)
TestPropertyValues values = TestPropertyValues.of(
"spring.kafka.consumer.bootstrap-servers=" + KAFKA.getBootstrapServers(),
"spring.producer.bootstrap-servers=" + KAFKA.getBootstrapServers()
);
values.applyTo(configurableApplicationContext);
不幸的是我得到了:
java.lang.IllegalStateException: You should start Kafka container first
at org.testcontainers.containers.KafkaContainer.getBootstrapServers(KafkaContainer.java:65) ~[kafka-1.12.2.jar:na]
【问题讨论】:
【参考方案1】:唯一的问题是调用对象后调用start()
方法
private static void startKafkaContainer()
KafkaContainer kafkaContainer = new KafkaContainer();
kafkaContainer.start();
更多信息请查看repository。
【讨论】:
以上是关于如何在 @ContextConfiguration 初始化程序之前启动 kafka 测试容器?的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用 @RunWith 和 @ContextConfiguration 注释的 jUnit 测试中访问 Spring 上下文?
ContextConfiguration不适用于测试平台的JUnit4类
找不到@SpringBootConfiguration,您需要在测试中使用@ContextConfiguration 或@SpringBootTest(classes=...)
java.lang.IllegalStateException:找不到@SpringBootConfiguration,您需要在测试中使用@ContextConfiguration