1

ディスラプターを含む一部のコードを単体テストするには、メインのテスト スレッドが続行される前に、ディスラプターに発行されたイベントが処理されるようにする必要があります (明らかに、ディスラプター コードをテストしていません)。

より洗練された解決策がないため、次のように問題を解決しました。

...
ringBuffer.publish(sequence);
while (ringBuffer.getBufferSize() > ringBuffer.remainingCapacity()) {
    Thread.yield();
}

ただし、ディスラプターを「同期モード」に設定する方法があるかどうか(調べましたが見つかりませんでした)、または使用可能な「同期モックディスラプター」実装で、スレッドがpublish()によってすべてのイベントが処理される前onEvent()から戻る

4

1 に答える 1

1

ディスラプターには同期モードがありません。

ファッジにはさまざまな方法があります。

  • イベントハンドラーがカウントダウンするCountDownLatchでパブリッシャーをブロックするなど。
  • もう 1 つの方法は、このjmockのような同じスレッド エグゼキューターを使用して、ディスラプターがイベント ハンドラーをスケジュールすることです。したがって、イベントがイベント ハンドラによっていつ処理されるかを制御します。

ただし、それは単体テストというよりも統合テストのように感じます。パブリッシャーがコンシューマーがイベントを消費したことを「知る」必要があるのはなぜですか?

于 2015-09-03T01:01:10.647 に答える