ExecutorService не выполняет Runnables в тестах JUnit - PullRequest
0 голосов
/ 10 мая 2018

У меня есть служба исполнителя, которую я хочу протестировать.

У меня есть несколько задач (Runnables), которые нужно вызвать, затем вызвать wait () , а фиктивный таймер через несколько секунд вызывает notify () .

Я сделал это, чтобы проверить, все ли задачи выполняются последовательно и через определенные промежутки времени.

Проблема в том, что run () метод моего Runnable вообще не вызывается. Я установил точку останова, и выполнение кода не достигает ее.

В простом кодировании это работает хорошо. Задачи ставятся в очередь, они вызывают wait () , пока какой-либо ответ не будет получен или не сработает тайм-аут, они вызывают notify () и следующая задача будет выполнена.

Проблема в том, что я запускаю тесты.

Есть ли мысли по этому поводу?

1 Ответ

0 голосов
/ 10 мая 2018

Это может произойти при выходе из метода test до того, как другие потоки нажмут wait и notify.

Попробуйте позвонить:

executorService.shutdown();
try {
    executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {

}

до выхода из метода test. Он будет блокировать метод тестирования до тех пор, пока все Runnable не будут завершены.

...