spring-boot icon indicating copy to clipboard operation
spring-boot copied to clipboard

Introduce @KafkaListenerTest for focused Kafka Listener testing

Open gustavomonarin opened this issue 8 months ago • 1 comments

Currently, testing Kafka listeners typically involves @SpringBootTest and @EmbeddedKafka, which loads the entire application context (as documented here).

To enable more lightweight and focused testing of Kafka listeners, similar to how @WebMvcTest allows for testing web controllers in isolation, could anew new test slice be introduced? @KafkaListenerTest.

This slice would focus on testing a specific listener and its associated configuration (e.g., serialization/deserialization, error handlers) without the overhead of the full application context.

This could significantly improve the efficiency and speed of testing Kafka listener components.

Any thoughts on this proposal?

gustavomonarin avatar May 28 '25 07:05 gustavomonarin

I've found that a combination of @SpringBootTest(classes = MyListener.class) (it's important to specify classes explicitly so that it won't load the whole context), @ImportAutoConfiguration(KafkaAutoConfiguration.class), and @EmbeddedKafka is fairly lightweight. This would take care of your "slicing" needs.

For something even lighter, a while back I made an annotation @KafkaMockConsumerTest that worked similarly to @WebMvcTest (using a MockConsumer instead of the actual broker). See the annotation and an example test. I never ended up actually using it, because the @EmbeddedKafka solution is fast enough for me, and because I didn't feel it was reliable enough as a homegrown solution, but it could be different if it was supported by Spring Boot.

LeMikaelF avatar May 29 '25 18:05 LeMikaelF