3

ファイルに非同期的に書き込むロギング モジュールをテストしようとしています... 単体テストでは、ログを読み取って、書き込まれたメッセージが期待どおりであることを確認します。ただし、任意の時間ファイルを待機するためにスリープしても、モジュールによる非同期書き込みは、単体テストが終了するまでファイルに到達しないことがわかりました。aio_close の横に print ステートメントを追加して、最後までファイルが閉じられないことを確認しました。これをテストするにはどうすればよいですか?

        #approximately the way this works:
        aio_open($pathname,
             $flags,
             $mode,
             sub
             {
                 my $fh = shift;
                 aio_write($fh,
                             0,
                             length($log),
                             $log,
                             0,
                             sub
                             {
                                 print "here";
                                 aio_close($fh, sub {});
                             });
             });
4

2 に答える 2

2

わかりました、少し掘り下げたところ、電話できることがわかりました...

IO::AIO::flush;

これにより、テストの実行前にすべての非同期バッファーがフラッシュされます。

于 2011-08-30T20:26:51.747 に答える
1

ファイルライターにコールバック「done_writing」サブを受け入れさせます。

提供されている場合は、それを呼び出します。

単体テストで、タッチ ファイルを作成するか、単体テストで「準備完了」フラグを設定するコールバックを提供します。

代替バージョンとして、コールバックにシグナルを発行させ、そのシグナルのシグナル ハンドラーでスリープするように単体テストをセットアップします。

于 2011-08-30T20:03:44.900 に答える