junit 用兵变检验正确的方法是什么?

g2ieeal7  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(147)

我正在编写单元测试,其中我需要使用Panache Reactive基于ID从MSSQL表中检索对象。然而,每次我尝试测试这个方法时,都会遇到一条错误消息,指出:“预期完成事件,但未收到”

pgvzfuti

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/

hpcdzsge

hpcdzsge2#

由于该过程是异步的,所以Assert发生在Uni完成之前。要解决这个问题,可以使用awaitItem()方法,然后执行Assert。
https://javadoc.io/static/io.smallrye.reactive/mutiny/1.1.2/io/smallrye/mutiny/helpers/test/UniAssertSubscriber.html#awaitItem()

subscriber.awaitItem().assertNotTerminated().assertItem(expectedResponse);

下面是另外两种Assert方式:

  • 尝试删除UniAssertSubscriber并在Mockito验证方法中添加超时。
Mockito.verify(transferResponseSQLRepository, timeout(1000).times(1)). findById(id);
  • 等待Uni返回响应并验证是否等于预期。
TransferResponse result = responseUni.await().atMost(Duration.ofSeconds(1));
assertEquals(result, isEqual(expectedResponse))

相关问题