美文网首页
CompletableFuture使用Mockito阻塞问题解决

CompletableFuture使用Mockito阻塞问题解决

作者: lfboo | 来源:发表于2022-03-14 21:11 被阅读0次

    CompletableFuture是一个很好用的工具,可最近在做单测mock时发现一直阻塞,刚开始以为是代码死循环问题,但经过一番排查,发现并不是,直接上代码:

    CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
        // do something
        return "";
    }, executor);
    
    CompletableFuture.allOf(future).join();
    
    future.get();
    

    当执行单测时,发现运行到CompletableFuture.allOf(future).join();这行时会一直阻塞,不往后运行

    解决办法

    上述发现异步线程没有得到执行,导致一直阻塞;因此我们就需要想办法让异步线程执行,可以借助Mockito.doAnswer:

    Mockito.doAnswer(invocationOnMock -> {
      ((Runnable) invocationOnMock.getArguments()[0]).run();
      return null;
    }).when(scheduleExecutor).execute(Mockito.any(Runnable.class));
    

    添加Mockito.doAnswer代码后,发现代码就不会阻塞了,同时,调整debug模式为thread, 就可以debug进runnable里面的代码了。

    相关文章

      网友评论

          本文标题:CompletableFuture使用Mockito阻塞问题解决

          本文链接:https://www.haomeiwen.com/subject/kyaydrtx.html