1

Netty を使用して、UDP メッセージをサーバーに送信するクライアント アプリケーションを作成しています。要するに、このコードを使用してストリームをチャネルに書き込みます。

ChannelFuture future = channel.write(request, remoteInetSocketAddress);
future.awaitUninterruptibly(timeout);
if(!future.isDone()){
   //abort logic
}

すべて正常に動作しますが、1 つだけ、書き込みを失敗させることができないため、中止ロジックをテストできません。つまり、サーバーがダウンしていても、未来は正常に完了します。書き込み操作には通常約 1 ミリ秒かかるため、タイムアウトを非常に短く設定してもあまり効果がありません。

await() 呼び出しの代わりに非同期モデルを使用するのが好ましい方法であることはわかっていますが、私のシナリオでは同期する必要があり、ある時点で確実に終了する必要があります。

未完成の未来をシミュレートする方法を知っている人はいますか?

よろしくお願いします!んん

4

2 に答える 2

1

コードの記述方法によっては、mockito などのモック フレームワークを使用できます。それが不可能な場合は、「接続された」UDP ソケット、つまりローカル アドレスにバインドされたデータグラム ソケットを使用することもできます。偽のサーバーに送信すると、PortunreachableException などを受け取るはずです。

于 2012-05-05T12:29:55.670 に答える
0

Netty には、この目的で使用できるクラス FailedFuture があります。

たとえば、以下をシミュレートするテストでクラスをモックできます。

ChannelFuture future;
if(ALWAYS_FAIL) {
    future = channel.newFailedFuture(new Exception("I failed"));
else
    future = channel.write(request, remoteInetSocketAddress);
于 2016-01-07T14:04:33.073 に答える