Я использую аннотацию @EmbeddedKafka следующим образом, чтобы создать макет kafka:
@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. Что-то вроде этого:
@AfterAll
public void tearDown(){
embeddedKafka.getKafkaServers().forEach(KafkaServer::shutdown);
embeddedKafka.getKafkaServers().forEach(KafkaServer::awaitShutdown);
}
Проблема в:
- Метод @AfterAll может быть только статическим.
- Если я сделаю ее статической — то и embeddedKafka должна быть статической, и тогда аннотация @Autowired работать не будет.
Я думаю, что могу передать bean-компонент в статическое поле из одного из тестов, а затем использовать его в tearDown(), но это действительно уродливо.
Какова "хорошая практика" закрытия bean-компонента только один раз после завершения всех тестов?
@ClassRule
для создания встроенной Kafka, а не для автоматического подключения@Autowired
embeddedKafka? - person alltej   schedule 04.03.2019