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