Как исправить это распространенное исключение
В одной из моих предыдущих статей говорилось о тестировании приложений 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, ознакомьтесь с некоторыми из моих предыдущих статей!