Сможете ли вы следить за шиной событий Vert.x в тестах Quarkus?

Кто-нибудь знает, как шпионить за шиной событий Vert.x в тестах Quarkus? В идеале я хотел бы утверждать, что во время метода на уровне сервиса мы отправляем событие по правильному адресу, но знает ли кто-нибудь, возможно ли это?

Если я просто попытаюсь использовать @InjectMock, я получу следующую ошибку

io.vertx.core.eventbus.impl.EventBusImpl@5769679b is not a normal scoped CDI bean, make sure the bean is a normal scope like @ApplicationScoped or @RequestScoped

person bnjns    schedule 29.12.2020    source источник
comment
В частности, у меня нет опыта работы с vert.x, но разве нельзя было бы зарегистрировать bean-компонент (с тестовой областью), прослушивая EventBus и вместо этого шпионя за этим bean-компонентом?   -  person Turing85    schedule 30.12.2020
comment
Да, это определенно работает - я также предполагаю, что вы также можете просто следить за фактическим компонентом, который потребляет событие (мы используем шину событий для некоторой асинхронной обработки). Не так идеально, но работает достаточно хорошо. Спасибо.   -  person bnjns    schedule 30.12.2020
comment
Зависит от того, что вы хотите проверить, не так ли? Конечным результатом является вызов слушателя (ей). Средства предоставляются vert.x. Я бы сказал, что мы можем доверять vert.x в выполнении своей работы, поэтому нам не нужно тестировать его поведение. Желаемое поведение - это вызов слушателей. Более полный подход заключался бы в проверке действий, запускаемых этими слушателями (что может привести к интеграционному или даже сквозному тесту).   -  person Turing85    schedule 30.12.2020
comment
Да, справедливо. Мы также собирались проверить, что правильные действия выполняются после использования события, но это будет в отдельном наборе тестов, чтобы избежать раздувания сервисных тестов.   -  person bnjns    schedule 30.12.2020


Ответы (1)


Я решил эту проблему, создав делегат ApplicationScoped вокруг EventBus. Этот делегат можно высмеять и проверить как обычный компонент в Quarkus. Все компоненты, которые напрямую использовали EventBus, должны вместо этого использовать EventBusDelegate. В своем тесте вы можете использовать аннотацию @InjectMock для вставки издевательства EventBusDelegate.

person Jakudaba    schedule 17.02.2021