私は、それぞれ独自の通信スレッドを持つプレーヤーオブジェクトとして表される複数の「プレーヤー」へのネットワーク通信を備えたSwing Javaアプリケーションを持っています。アプリには、すべてのプレーヤー オブジェクトを管理する「チーム」オブジェクトがあります。いくつかの UI コンポーネントは、Team オブジェクトを通じてプレイヤーから渡されたイベントをリッスンします。
私の設計では、チーム オブジェクトは、invokeLater を使用して Swing スレッドですべてのイベントを起動するため、アプリケーションの残りの部分でスレッド化の問題を気にする必要はありません。ただし、JUnit テストで Team クラスをテストする方法がわかりません。
もう少し背景。最初に、Team オブジェクトにプレイヤー オブジェクト スレッドでイベントを発生させました (スレッドの切り替えはまったくありません)。チーム単体テストは成功しましたが、invokeLaters を使用して UI で多くのスレッドの問題が発生し、すべての場所で同期されました。次に、Team オブジェクトが Swing スレッドでイベントを発生させることで、スレッド モデルを簡素化することにしましたが、イベントを受信しないため、チームの単体テストは失敗します。何をすべきか?
心に浮かぶ解決策は、チームの上に追加のオブジェクトを導入してスレッドの切り替えを行い、元の単体テストをそのまま維持することですが、単体テストを成功させるためだけに運用コードを複雑にするという考えは好きではありません。