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