3
我正在学习Java 8 CompletableFuture
,并以此结束。第一步,你对这行代码有什么看法?我需要并行发送请求到不同的服务,然后等待所有人响应并继续工作。CompletableFuture可用性和单元测试
//service A
CompletableFuture<ServiceAResponse> serviceAFuture = CompletableFuture.supplyAsync(
() -> this.ServiceA.retrieve(serviceARequest), serviceAExecutorService
);
//service B
CompletableFuture<ServiceBResponse> serviceBFuture = CompletableFuture.supplyAsync(
() -> this.ServiceB.retrieve(serviceBRequest), serviceBExecutorService
);
CompletableFuture.allOf(serviceAFuture, serviceBFuture).join();
ServiceAResponse responseA = serviceAFuture.join();
ServiceBResponse responseB = serviceBFuture.join();
即使代码正在做我想做的事,我在测试代码所在的类时遇到问题。我尝试使用的Mockito和做类似:
doAnswer(invocation -> CompletableFuture.completedFuture(this.serviceAResponse))
.when(this.serviceAExecutorService)
.execute(any());
在哪里执行程序服务的服务响应嘲讽,但测试永远不会结束,并且线程保持在这条线在等待着什么
CompletableFuture.allOf(serviceAFuture, serviceBFuture).join();
上的任何暗示什么我在这里失踪?谢谢!
这样做,我得到NPE,因为我模仿我的ExecutorService(我使用一个自定义),但如果我用一个moked一个,测试永远不会结束。 当然,如果我使用默认的执行器服务,而不发送我的CompletableFuture.supplyAsync(),它就像一个魅力。 – Leo
回复更新,请再次查看 –
YES!谢谢!这就是我一直想要嘲笑ExecutionService.execute()方法的原因吗?这正是我想要做的,但它的工作方式。 – Leo