DEV Community

Abhishek Gupta for ITNEXT

Posted on

4 2

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(foo.bar.AppTest)  Time elapsed: 0.066 sec  <<< FAILURE!
java.lang.AssertionError: output topic was empty
Expected: is <false>
     but: was <true>
    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
    at org.junit.Assert.assertThat(Assert.java:956)
    at com.foo.bar.AppTest.testCase1(AppTest.java:58)
    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 🙏🏻

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

Billboard image

Create up to 10 Postgres Databases on Neon's free plan.

If you're starting a new project, Neon has got your databases covered. No credit cards. No trials. No getting in your way.

Try Neon for Free →

đź‘‹ Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay