Citrus framework: проверка без сбоев при тайм-ауте приема

В своем цитрусовом тесте я хочу проверить количество конкретных сообщений в теме Kafka.

Однако функция получения не проходит проверку, если в заданном окне тайм-аута нет сообщений в теме.

Это то, что я пробовал:

receive(receiveMessageBuilder -> receiveMessageBuilder
                    .endpoint(topic)
                    .messageType(MessageType.PLAINTEXT)
                    .validator(new KafkaCounterMessageValidator(counter, 1, context.getVariable(FILENAME))))
            );

Я хотел вызвать эту функцию в цикле на некоторое время и написать в тестовом контексте переменную количество сообщений, чтобы проверить это позже.

Однако проблема в том, что если я хочу, чтобы в теме было ровно N сообщений, мне нужно вызвать эту функцию как минимум N+1 раз, что в большинстве случаев не пройдет тест, потому что сообщений не будет и **ActionTimeoutException** поднимется .

Есть ли способ отключить такое поведение или реализовать его другим способом?


person Никита Михайлов    schedule 24.09.2019    source источник


Ответы (1)


Вы можете окружить итерацию действием catch и явно обработать исключение ActionTimeoutException. Тест не будет провален из-за улова, поэтому вы можете впоследствии проверить количество полученных сообщений.

См. также https://citrusframework.org/citrus/reference/2.8.0/html/index.html#actions-catch-exceptions

person Christoph Deppisch    schedule 10.10.2019