Как исправить это распространенное исключение

В одной из моих предыдущих статей говорилось о тестировании приложений Kafka Streams. Вот совет, который может пригодиться!

Во время тестирования вы можете встретить java.util.NoSuchElementException: Uninitialized topic исключение. Скорее всего, это связано с тем, что вы вызвали TestOutputTopic.readValue (например, как часть проверки assert). Проблема не в самом исключении, а в сообщении об ошибке Uninitialized topic, которое может сбивать с толку. Исключение, скорее всего, появится, если ваша обработка Topology не сработала должным образом и в теме (TestOutputTopic), из которой вы пытались читать, не было записи.

Рассмотрим этот пример:

TestInputTopic<String, String> inputTopic = ...;
TestOutputTopic<String, String> outputTopic = ...;
inputTopic.pipeInput("foo", "bar");
assertThat(outputTopic.readValue(), equalTo("foobar"));

Чтобы избежать путаницы, вы должны подтвердить, является ли тема вывода пустой - как до, так и (необязательно) после проверки значения:

Наличие assertThat (с правильным сообщением об ошибке) перед утверждением outputTopic.readValue() гарантирует, что вы получите ответ об ошибке, который вы можете понять. Что-то вроде этого:

Теперь output topic was empty имеет смысл ... по крайней мере, для меня!

Если вас интересуют Kafka Streams, ознакомьтесь с некоторыми из моих предыдущих статей!