美文网首页
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