我正在编写单元测试,其中我需要使用Panache Reactive基于ID从MSSQL表中检索对象。然而,每次我尝试测试这个方法时,都会遇到一条错误消息,指出:“预期完成事件,但未收到”。
pgvzfuti1#
参见https://smallrye.io/smallrye-mutiny/2.2.0/guides/testing/您需要awaitXYZ方法,assertItem立即运行Assert检查,因为它是异步代码,所以项可能还没有出现。另一种方法是使用.await()订阅,这样您的JUnit线程将等待,就像普通命令式代码一样。参见https://smallrye.io/smallrye-mutiny/2.2.0/guides/reactive-to-imperative/
awaitXYZ
assertItem
.await()
hpcdzsge2#
由于该过程是异步的,所以Assert发生在Uni完成之前。要解决这个问题,可以使用awaitItem()方法,然后执行Assert。https://javadoc.io/static/io.smallrye.reactive/mutiny/1.1.2/io/smallrye/mutiny/helpers/test/UniAssertSubscriber.html#awaitItem()
awaitItem()
subscriber.awaitItem().assertNotTerminated().assertItem(expectedResponse);
下面是另外两种Assert方式:
Mockito.verify(transferResponseSQLRepository, timeout(1000).times(1)). findById(id);
TransferResponse result = responseUni.await().atMost(Duration.ofSeconds(1)); assertEquals(result, isEqual(expectedResponse))
2条答案
按热度按时间pgvzfuti1#
参见https://smallrye.io/smallrye-mutiny/2.2.0/guides/testing/
您需要
awaitXYZ
方法,assertItem
立即运行Assert检查,因为它是异步代码,所以项可能还没有出现。另一种方法是使用
.await()
订阅,这样您的JUnit线程将等待,就像普通命令式代码一样。参见https://smallrye.io/smallrye-mutiny/2.2.0/guides/reactive-to-imperative/
hpcdzsge2#
由于该过程是异步的,所以Assert发生在Uni完成之前。要解决这个问题,可以使用
awaitItem()
方法,然后执行Assert。https://javadoc.io/static/io.smallrye.reactive/mutiny/1.1.2/io/smallrye/mutiny/helpers/test/UniAssertSubscriber.html#awaitItem()
下面是另外两种Assert方式: