我有 Swing java 应用程序,它与几个“播放器”进行网络通信,这些播放器对象表示为播放器对象,每个播放器对象都有自己的通信线程。该应用程序有一个管理所有玩家对象的“团队”对象。几个 UI 组件通过 Team 对象监听玩家传递的事件。
在我的设计中,团队对象使用 invokeLater 触发 Swing 线程上的所有事件,这样我的应用程序的其余部分就不必为线程问题而烦恼。但是,我不知道如何在 JUnit 测试中测试 Team 类。
多一点背景。起初,我让 Team 对象在玩家对象线程上触发其事件(根本没有线程切换)。Team 单元测试成功了,但是我在 UI 中使用 invokeLaters 遇到了许多线程问题,并且在所有地方都进行了同步。然后我决定通过让 Team 对象在 Swing 线程上触发事件来简化线程模型,但是现在 Team 单元测试失败了,因为它没有接收到事件。该怎么办?
想到的一个解决方案是在 Team 之上引入一个额外的对象,该对象执行线程切换并保持原始单元测试的完整性,但我不喜欢在生产代码中引入复杂性以使单元测试成功的想法。