グアバイベントバスを使用しています。私は、イベントがバスに投稿されるのをリッスンして、常に実行されているはずのサーバーのようなオブジェクトを持っています。したがって、junit テスト (MyObject はテスト対象のクラス) で、独自のスレッドで作成して、これをシミュレートし、ブロックを防止します。
@Test
public void test() {
EventBus eventBus = new EventBus();
Thread thread= new Thread() {
@Override
public void run()
{
logger.debug("Creating new thread");
MyObject myObject = new MyObject(eventBus);
}
};
thread.start();
...
}
すべて問題ありません。myObject は独自のスレッド Thread1 で作成されます。その後、テストでイベント バスにイベントを投稿します。
eventBus.post(triggerObject);
私が見つけた奇妙なことは、 MyObject クラス内のサブスクライブされたメソッドからのすべてのアクション/ロギングがメインスレッドで再び実行されていることです。myObject は特定の他の部分からの応答を待ちます。これは、メイン スレッドにあるため、テストをブロックします。なぜこうなった?EventBus または Java スレッド化で何か間違っているのでしょうか?