【问题标题】:Can you spy on the Vert.x event bus in Quarkus tests?你能在 Quarkus 测试中监视 Vert.x 事件总线吗?
【发布时间】:2021-04-06 12:45:33
【问题描述】:

有人知道在 Quarkus 测试中监视 Vert.x 事件总线的方法吗?理想情况下,我想断言,在服务层的一个方法中,我们将一个事件发送到正确的地址,但是有人知道这是否可能吗?

如果我只是尝试使用@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

【问题讨论】:

  • 我对 vert.x 没有特别的经验,但难道不能注册一个(测试范围的)bean,监听 EventBus 并监视这个 bean 吗?跨度>
  • 是的,这绝对有效 - 我也猜你也可以只监视使用事件的实际 bean(我们使用事件总线进行一些异步处理)。不理想,但工作做得足够好。谢谢。
  • 取决于您要验证的内容,不是吗?最终结果是侦听器被调用。方法由 vert.x 提供。我认为我们可以信任 vert.x 来完成它的工作,因此我们不需要测试它的行为。所需的行为是调用侦听器。更“完整”的方法是验证此侦听器触发的操作(这可能会导致集成甚至端到端测试)。
  • 是的,公平点。我们还将测试消费事件后是否执行正确的操作,但这将在单独的测试套件中进行,以避免服务测试变得臃肿。

标签: mockito quarkus vertx-eventbus


【解决方案1】:

我通过在 EventBus 周围创建一个 ApplicationScoped Delegate 解决了这个问题。这个 Delegate 可以作为 Quarkus 中的普通 bean 进行模拟和检查。所有直接使用 EventBus 的 Bean 都需要使用 EventBusDelegate。在您的测试中,您可以使用 @InjectMock 注释来注入模拟的 EventBusDelegate。

【讨论】:

  • 您能否提供一些示例代码段来说明您是如何做到的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
相关资源
最近更新 更多