2

でメッセージを送信しvert.x event bus、イベント バス コンシューマからの応答を処理するクラスがあります。クラスが実行されると、コンストラクターまたは特定のメソッド呼び出しで渡されたオブジェクトのメソッドを呼び出します。

渡されたオブジェクトのメソッドが実際に呼び出されていることを確認するために、Mockito を使用してオブジェクトをモックします。テストクラスの基本構造は次のとおりです。

@RunWith(VertxUnitRunner.class)
public class MyTest {

    @Rule
    public RunTestOnContext rule = new RunTestOnContext(new VertxOptions());

    @Test
    public void test(TestContext context) {

       Runnable r = new Runnable() {
          @Override
            public void run() {
                // Create an event bus consumer for testing
                // ...

                // Create the class to be tested
                Dao dao = new Dao();
                DbManager dbManager = Mockito.mock(DbManager.class);
                dao.save(dbManager);
            }
       }

       Thread t2 = new Thread(r);
       t2.start();
       t2.join();

       Mockito.verify(dbManager, ...
       async.complete();
    }
}

これは、一部の時間だけ機能します。問題は、daoクラスが に非同期メッセージを送信しvert.x event busて応答を処理するとき、これはすべて、join()呼び出しが待機しているスレッドとは別のスレッドで発生しているため、Mockito.verify頂点が管理するスレッドが完了する前に発生する可能性があることです。 .

これらのテストを構造化して、依存するすべての非同期スレッドが終了するまで Mockito が待機するようにする最善の方法は何ですか?

ありがとう

4

1 に答える 1