我正试图为我的Kafka消费者编写一个集成测试。
我在用 JUnit 5
,所以我可以׳无法使用初始化 @Rule
,以及我看到的例子 @Container
初始化它不工作。
我试着把我的junit版本改成 Junit 4
但它会损害我的其他测试(所以我需要继续保持) Junit 5
).
我试着在JUnit4中使用这个例子:https://www.testcontainers.org/modules/kafka/
还有那些 Junit 5
: https://www.hascode.com/2019/01/using-throwaway-containers-for-integration-testing-with-java-junit-5-and-testcontainers/
但它不认识我的注解( @Testcontainers
, @Container
).
gradle进口:
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.4.0'
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.4.0'
implementation group: 'org.apache.kafka', name: 'kafka-clients', version: '1.1.1'
testIntegrationImplementation "org.testcontainers:kafka:1.11.4"
我正在上载此代码作为注解:
@Testcontainers
public class KafkaTestContainer implements BeforeAllCallback, AfterAllCallback {
@Container
public KafkaContainer kafkaContainer = new KafkaContainer();
private static final Logger logger = LoggerFactory.getLogger(KafkaTestContainer.class);
@Inject
private KafkaTestContainer() {
try {
} catch (Exception e) {
logger.error(e.getMessage());
}
}
private String getKafkaBootstrapServers(Request request) throws IOException {
return this.kafkaContainer.getBootstrapServers();
}
public void stopKafkaTestContainer() {
// Stop the container.
kafkaContainer.stop();
}
@Override
public void afterAll(ExtensionContext context) throws Exception {
}
@Override
public void beforeAll(ExtensionContext context) throws Exception {
boolean isKafkaRunning = this.kafkaContainer.isRunning();
if(isKafkaRunning) {
logger.info("start Kafka docker!!");
}
}
iskafkarunning值始终为false。
感谢您对kafka测试容器初始化的任何帮助?
我错过了什么??
3条答案
按热度按时间5t7ly7z51#
缺少以下依赖项:
jckbn6z72#
当然有更复杂的方法可以做到这一点,但我认为你只需要:
如果可以的话,您应该在混合中添加一个真正的异步框架,并实现更成熟的重试和超时。
bfhwhh0e3#
以下是我的设置:
测试等级exmaple: