当前位置: 首页 > 知识库问答 >
问题:

调用void方法的CompletableFuture.runAsync()的Mockito测试用例

汪坚
2023-03-14
public void getCouponAndNotifyAsync(String countryId, String channelId,
        String storeNumber, String clientId, NotificationRequest notificationRequest)
        throws FirestoreException, TurneroServiceException {
    CompletableFuture.runAsync(() -> getCouponAndNotify(countryId, channelId,
            storeNumber, clientId, notificationRequest));
}
@Test
    public void getCouponAndNotifyAsync() throws Exception {
        //doNothing().when(turneroService).getCouponAndNotify(COUNTRYID, CHANNELID, STORENUMBER, CLIENTID, new NotificationRequest("ext_rborse@falabella.cl", "all"));

        CompletableFuture<Void> runAsync = CompletableFuture
                .runAsync(() -> doNothing().when(turneroService).getCouponAndNotify(COUNTRYID, CHANNELID, STORENUMBER, CLIENTID, new NotificationRequest("ext_rborse@falabella.cl", "all")));

        assertTrue(runAsync.isDone());

    }

已更新测试用例,但仍不工作。

@Test
    public void getCouponAndNotifyAsync() throws Exception {
        //doNothing().when(turneroService).getCouponAndNotify(COUNTRYID, CHANNELID, STORENUMBER, CLIENTID, new NotificationRequest("ext_rborse@falabella.cl", "all"));

        CompletableFuture<Void> runAsync = CompletableFuture
                .runAsync(() -> doNothing().when(turneroService).getCouponAndNotify(COUNTRYID, CHANNELID, STORENUMBER, CLIENTID, new NotificationRequest("ext_rborse@falabella.cl", "all")));

        assertTrue(ForkJoinPool.commonPool().awaitQuiescence(5, TimeUnit.SECONDS));
        assertTrue(runAsync.isDone());

    }

共有1个答案

羊煜
2023-03-14

我假设您正在其他地方测试getCouponandNotify(),这样您就不必担心它会引发异常。

您将遇到的是getCouponandNotifyAsync()getCouponandNotify()返回之间的竞争条件。对此有几种解决方案

由于您使用的是通用的forkjoinpool,请执行以下操作

assertTrue(ForkJoinPool.commonPool().awaitQuiescence(5, TimeUnit.Seconds));
 类似资料:
  • 我有以下代码 我对嘲笑不熟悉。我有以下疑问。我正在尝试测试公共方法。 我是否可以断言私有变量workDone的值? 是否可以验证超类中的方法调用? 如何在方法中模拟私有方法调用?

  • 我正在使用powermock。我面临以下场景的问题。 更新时间: 我的问题不同。在另一个链接中给出的示例中,私有方法返回了一些值。在我的例子中,这两种方法都返回Void。 面临为myPublicMethod编写测试用例以模拟同一类中的私有方法的问题。 我想模拟myPrivateMethod方法,因为它不应该被调用,但是测试用例应该包括myPublicMethod方法。这两种方法都是无效的。 我不能

  • 问题内容: 这可能吗?我尝试过,但EasyMock抱怨时间必须> = 1 问题答案: 我设法提出了一个解决方案:

  • 我正在用Mockito为一个项目设置jUnit测试。在被测系统(DrawingService)中调用方法时遇到问题。模拟包括图形和IDrawingRepository。 我不熟悉TDD、单元测试和一般的模拟,所以我可能犯了一些noob错误?任何帮助都将不胜感激。 以下是测试课程: 以下是正在测试的系统:

  • 我有一个返回类型为的方法。它还可以抛出许多异常,所以我想测试一下那些被抛出的异常。所有尝试都失败了,原因相同: 类型Stubber中的(T)不适用于参数(void)时的方法 有什么想法,我可以如何获得方法抛出一个指定的异常?

  • 我遇到了问题,有两个不实的方法。在我已经按照这个答案嘲笑了一个数组列表,该数组列表将在for循环中循环,没有嘲笑列表,但传递了一个真实的列表并添加了被嘲笑的对象。 Mockito在这条线上给我一个InvalidUseOfMatchersException 验证(effectList.get(Mockito.anyInt())。执行(playerHandler) 关于这个例外,有很多关于SO的问题,