(junit/mockito) thread.join() завершается до завершения работы потока?JAVA

Программисты JAVA общаются здесь
Anonymous
(junit/mockito) thread.join() завершается до завершения работы потока?

Сообщение Anonymous »

быстро поискал и ничего не нашел. Вот небольшой пример кода

Код: Выделить всё

Map valuesFromThread = new HashMap();
List threads = new ArrayList();
List labels = new ArrayList();

labels.add('hello1');
labels.add('hello2');
labels.add('hello3');

for (String l : labels)
{
Thread t = new Thread(() ->
{
valuesFromThread.put(l, 123);
});
t.start();
threads.add(t);
}

// wait for work to complete
for (Thread t : threads.values())
{
t.join();
}

if (labels.size() != presignedS3Urls.size())
{
// throw error (never happens in practice)
}
Поскольку на практике мы ждем завершения каждого потока, гарантируя наличие записи в ValuesFromThread для каждого потока, а значит, и для каждой метки.
Однако, когда я использую этот метод в модульном тесте, создается впечатление, что работа потока на самом деле никогда не выполняется, или, по крайней мере, до того, как мы выполним проверку внизу.
Обратите внимание: этот код вложен в метод, который мне нужно протестировать, поэтому на самом деле мне не нужно создавать макет сценария, эквивалентный приведенному выше, который проверяет что-то подобное. Мне нужно, чтобы эту логику можно было тестировать с помощью внешнего метода без изменений. что-нибудь из этого.
Есть ли какой-нибудь способ решить эту проблему?
Я не нашел никаких ресурсов по этой проблеме, поэтому не смог попробуй еще что-нибудь.

Подробнее здесь: https://stackoverflow.com/questions/781 ... rk-is-done

Вернуться в «JAVA»