1

我正在尝试在 quarkus 2.2 上测试一些用 mutiny 实现的反应性代码。这段代码做一些 sql 查询,我想要一个事务方法。

据我所知,为了测试响应式代码,我必须明确地等待结果。但是当有事务时,我得到一个 io.quarkus.runtime.BlockingOperationNotAllowedException: Cannot start a JTA transaction from the IO thread。

这里是测试:

  void myTest() throws InterruptedException, SystemException, NotSupportedException {
    final Prestation prestation = Prestation.builder().build();
    final Uni<Uni<Integer>> uniUni = Uni.createFrom().voidItem().onItem().transformToUni(unused -> prestationCreate.upsert(prestation)).onItem()
            .transformToUni(aBoolean -> {
                return prestationClosedThePreviousDaySelect.select2Multi(LocalDate.of(2021, 04, 29))
                        .collect().asList();
            })
            .onItem()
            .transformToUni(prestations -> Uni.createFrom().item(prestationRepository.deleteAll()))
            .runSubscriptionOn(Infrastructure.getDefaultExecutor());

    final UniAssertSubscriber<Uni<Integer>> uniUniAssertSubscriber = uniUni.subscribe().withSubscriber(UniAssertSubscriber.create());
    uniUniAssertSubscriber.awaitItem()
            .assertCompleted();
}

使用此代码,异常将在最后一行抛出。

如果我用 listUniAssertSubscriber.assertCompleted(); 替换最后一行,测试将失败并显示“预期完成事件,但未收到它”。

有人知道是否有办法用事务测试反应性代码?

4

0 回答 0