У меня есть Java-приложение Swing с сетевыми соединениями с несколькими «Игроками», которые представлены как объекты игрока, каждый со своим собственным потоком связи. В приложении есть объект «Команда», управляющий всеми объектами игрока. Несколько компонентов пользовательского интерфейса прослушивают события, передаваемые от игроков через объект Team.
В моем проекте командный объект инициирует все события в потоке Swing с помощью invokeLater, так что остальной части моего приложения не нужно беспокоиться о проблемах с потоками. Однако я не знаю, как я могу протестировать класс Team в тесте JUnit.
Еще немного фона. Сначала у меня был объект Team, запускающий свои события в потоках объекта игрока (вообще без переключения потоков). Модульный тест команды прошел успешно, но я столкнулся со многими проблемами с потоками в своем пользовательском интерфейсе с помощью invokeLaters и синхронизировался повсюду. Затем я решил упростить модель многопоточности, запустив события запуска объектов Team в потоке Swing, но теперь модульный тест Team не проходит, потому что он не получает события. Что делать?
Решение, которое приходит на ум, состоит в том, чтобы ввести дополнительный объект поверх Team, который переключает потоки и сохраняет исходный модульный тест нетронутым, но мне не нравится идея усложнять производственный код только для того, чтобы модульный тест был успешным.