4

を使用して非同期的に記述された Perl プロジェクトに取り組んでいAnyEventます。テスト中に、コードのバグにより、テストが完了した後にブロックされたコードが呼び出されたため、テストは成功したように見えたが、ブロックされた呼び出しが後で他のテストを汚染するという状況がありました。

私が望んでいるのは、テストの分解ですAnyEvent。他のブロックされた呼び出しを待っていないことを確認してください。AnyEventまだ実行されていない呼び出しがあるかどうかを確認することは可能ですか?

4

3 に答える 3

0

AnyEvent::Debugを使用してウォッチャーをラップし、すべてのウォッチャーを一覧表示する 'wl' を含むコマンドをソケットでリッスンします。これにより、必要なものが得られます。

たとえば、コード内で AnyEvent::Debug::shell::wl 関数を呼び出してウォッチャー リストを取得し、それを反復して AnyEvent::Debug::Wrapped メソッドで検査できます。

于 2012-09-17T19:20:07.127 に答える
-1

あなたの質問には直接的な答えはありませんが、役立つかもしれない2つのことを提案したいと思います

  • AnyEvent::Log を使用して、非同期分岐が発生した場所を確認します。これは、作成したものが破棄されていないことを見つけるのにも役立ちます。

  • テストルーチンをサブプロセスで実行し、AnyEvent->child でそれを監視し、先に進む前に終了することを確認します

また、作成された条件変数や IO ハンドルの制御を失っている場所を確認してください。それらを破棄できるようにしておくと、テストがはるかに簡単になります。

于 2012-09-17T19:12:21.270 に答える