DEV Community

Abhishek Gupta for ITNEXT

Posted on

Kafka Streams testing tip: Making sense of "Uninitialized topic" exception

One of my previous blog post discussed testing Kafka Streams application.
Here is a related tip that might come in handy!

While testing, you might come across java.util.NoSuchElementException: Uninitialized topic exception. Most probably, this is due to the fact that you invoked TestOutputTopic.readValue (e.g. as part of an assert check). The problem is not the exception itself, but the error message Uninitialized topic which can be confusing. The exception is likely to pop up if your processing Topology did not work as expected and there was no record in the topic (TestOutputTopic) you were trying to read from.

Consider this example:

TestInputTopic<String, String> inputTopic = ...;
TestOutputTopic<String, String> outputTopic = ...;

inputTopic.pipeInput("foo", "bar");
assertThat(outputTopic.readValue(), equalTo("foobar"));
Enter fullscreen mode Exit fullscreen mode

To avoid confusion, you should confirm whether the output topic is empty - both before and (optionally) after checking for the value, e.g.

assertThat("output topic was empty",outputTopic.isEmpty(), is(false));
inputTopic.pipeInput("foo", "bar");
assertThat(outputTopic.readValue(), equalTo("BAR"));
assertThat("output topic was not empty",outputTopic.isEmpty(), is(true));
Enter fullscreen mode Exit fullscreen mode

Having the assertThat (with a proper error message) before asserting outputTopic.readValue() ensures that you get a failure response which you can make sense of. Something that looks like:

testCase1(  Time elapsed: 0.066 sec  <<< FAILURE!
java.lang.AssertionError: output topic was empty
Expected: is <false>
     but: was <true>
    at org.hamcrest.MatcherAssert.assertThat(
    at org.junit.Assert.assertThat(
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Enter fullscreen mode Exit fullscreen mode

Now output topic was empty make sense.. at least to me!

If you're interested in Kafka Streams, do check out some of my previous blogs! Happy to get your feedback via Twitter or just drop a comment 🙏🏻

Discussion (0)