【发布时间】:2019-07-22 21:47:21
【问题描述】:
我使用@EmbeddedKafka注解如下有一个kafka mock:
@ExtendWith(SpringExtension.class)
@SpringBootTest
@EmbeddedKafka(partitions = 1,
topics = {"topic"},
brokerProperties = {
"auto.create.topics.enable=${topics.autoCreate:false}",
"delete.topic.enable=${topic.delete:true}",
"broker.id=2"})
public class KafkaUsersTest {
@Autowired
private EmbeddedKafkaBroker embeddedKafka;
@Test
public void test1() {
// test something
}
@Test
public void test2() {
// test something
}
...
}
现在,测试完成后,我想关闭嵌入式Kafka bean。像这样的:
@AfterAll
public void tearDown(){
embeddedKafka.getKafkaServers().forEach(KafkaServer::shutdown);
embeddedKafka.getKafkaServers().forEach(KafkaServer::awaitShutdown);
}
问题是:
- @AfterAll 方法只能是静态的。
- 如果我将其设为静态 - 那么嵌入式Kafka 也必须是静态的,然后 @Autowired 注释将不起作用。
我想我可以将bean从一个测试中转换为一个静态字段,然后在tearDown()中使用它,但这真的很难看。
在所有测试完成后只关闭一次 bean 的“好习惯”是什么?
【问题讨论】:
-
您是否尝试过使用
@ClassRule创建嵌入式Kafka 而不是自动连接@AutowiredembeddedKafka?
标签: spring spring-boot junit junit5 spring-boot-test