Поймать исключение в интеграционном тесте Kafkalistener - PullRequest
0 голосов
/ 19 марта 2020

Поэтому мне нужно создать интеграционный тест для моего метода kafkalistener, в котором тест ожидает, что фактически возникнет исключение ListenerExecutionFailedException, так как сообщение не было выполнено во время потребления из-за неактивности другой службы.

Ниже приведен код теста, где я использую Embedkafkabroker для производителя и потребителя:

@Test(expected = ListenerExecutionFailedException.class)
public void shouldThrowException() {

    RecordHeaders recordHeaders = new RecordHeaders();
    recordHeaders.add(new RecordHeader("messageType", "bootstrap".getBytes()));
    recordHeaders.add(new RecordHeader("userId", "123".getBytes()));
    recordHeaders.add(new RecordHeader("applicationId", "1234".getBytes()));
    recordHeaders.add(new RecordHeader("correlationId", UUID.randomUUID().toString().getBytes()));

    ProducerRecord<String, String> producerRecord = new ProducerRecord<>(
        "TEST_TOPIC",
        1,
        null,
        "message",
        "",
        recordHeaders);
    producer.send(producerRecord);


    consumer.subscribe(Collections.singleton("TEST_TOPIC"));

    consumer.poll(Duration.ofSeconds(2));

}

Мне интересно, что исключение считалось не сгенерированным, и тест не пройден, хотя я знаю, что сообщение действительно получено слушателем и исключением был брошен с тех пор, как я увидел их в журнале.

И хотя я изменил ожидаемое на Throwable, исключение, похоже, не обнаружено.

Что я должен сделать, чтобы исключение было обнаружено Junit?

Кроме того, еще одна интересная вещь заключается в том, что я попытался смоделировать класс обслуживания, который был вызван в слушателе, и вернуть некоторый фиктивный файл. значение, но служба не вызывается, когда я использовал Mockito.verify

1 Ответ

0 голосов
/ 19 марта 2020

У вас, похоже, есть какое-то недопонимание.

producer.send

consumer.poll

Вы звоните напрямую клиентам kafka и Spring вообще не использует Spring в этом тесте.

ListenerExecutionFailedException - исключение, которое контейнер слушателя Spring оборачивает в исключения пользователя, выдаваемые слушателями сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...