でメッセージを送信し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 が待機するようにする最善の方法は何ですか?
ありがとう