如何在 @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的意思

ContextConfiguration不适用于测试平台的JUnit4类

(转)@ContextConfiguration注解说明

找不到@SpringBootConfiguration,您需要在测试中使用@ContextConfiguration 或@SpringBootTest(classes=...)

java.lang.IllegalStateException:找不到@SpringBootConfiguration,您需要在测试中使用@ContextConfiguration