Код: Выделить всё
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)
}
Однако, когда я использую этот метод в модульном тесте, создается впечатление, что работа потока на самом деле никогда не выполняется, или, по крайней мере, до того, как мы выполним проверку внизу.
Обратите внимание: этот код вложен в метод, который мне нужно протестировать, поэтому на самом деле мне не нужно создавать макет сценария, эквивалентный приведенному выше, который проверяет что-то подобное. Мне нужно, чтобы эту логику можно было тестировать с помощью внешнего метода без изменений. что-нибудь из этого.
Есть ли какой-нибудь способ решить эту проблему?
Я не нашел никаких ресурсов по этой проблеме, поэтому не смог попробуй еще что-нибудь.
Подробнее здесь: https://stackoverflow.com/questions/781 ... rk-is-done