リスト内のデバイス数に応じてapiが2回以上呼び出されるエグゼキュータサービスを含むコード実行をユニットテストしようとしています。私がコンソールから単体テストしようとすると、Mockitoの検証で、デバイスのリストを渡している間にApiが一度だけ呼び出されるというエラーが返されません。しかし、intellijでデバッグすると、正しく動作し、リストのデバイス数に応じて実行され、検証されます。続きMockito ExecutorServiceで実行したときの「回数」が実際のものより少ないかどうかを確認する
コード
final ExecutorService executor = new ThreadPoolExecutor(MAX_THREADS,
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
DeviceList.stream().forEach(device -> executor.execute(() ->
GatewayToTest.deliver(device, id, testObject)));
ユニットテストコードです:上記のコードで
verify(GatewayToTest, times(devices.size()))
.deliver(any(Device.class), anyString(), any(TestObject.class));
私はコンソールでユニットテストを実行すると、GatewayToTestは一度だけ呼ばれます。
(https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ Executor.html#execute-java.lang.Runnable-)、タスクは*将来の*実行されます。ユニットテストは、いくつかのタスクがまだ完了していないときに '検証 'しようとしています。 [This](https://stackoverflow.com/questions/1250643/how-to-wait-for-all-threads-to-finish-using-executorservice)が役に立ちます。 –