[Spring Boot] Unit Testing Kafka Producer with EmbeddedKafkaBroker

When working with Kafka, testing can be a little bit tricky because there are many settings to be done in order to start testing. For example, Kafka broker needs to be running, the application needs to point to the correct broker, etc.

This article will cover how to unit test Kafka producer with EmbeddedKafkaBroker.

The benefits of this approach is that

  • Tests are automated
  • There is no need to set up a testing environment or brokers

However, at this point I am not sure how much this approach can cover in terms of different configurations and complex usages of Kafka. Hopefully, there will be more in this series to cover with more robust Kafka examples.

Kafka Producer Implementation

Let us start with the most basic KafkaProducer.

Of course KafkaTemplate can be configured according to the requirements of an application. KafkaAutoConfiguration will create one for you out-of-box pointing at 127.0.0.1:9092 if KafkaTemplate bean is missing. I will create a javaconfig for it. As of right now, it may not do much but I will add more customization to it in future articles.

Test Code Implementation

Setup

First of all, the test code needs to be set up in order to use the EmbeddedKafkaBroker. This is important because by doing this, we don’t need to take care of the Kafka brokers during testing.

Because of the fact that SampleProducer makes use of KafkaTemplate and our producer needs to point at the embedded broker instead of 127.0.0.1:9092, some configuration needs to be done.

Writing Tests

Secondly, tests can be written using the configuration provided above.

It can be noticed that any records sent by SampleProducer goes to EmbeddedKafkaBroker. Then, each message is added to a queue. Lastly, assertions in the test code can be performed on the messages from the queue.

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store