5

私が解決しようとしているシナリオは次のとおりです。システム上のWebエンドポイントにWebを作成するテストプログラムがあります。

このテストプログラムには、正常なテストサイクルを完了する外部システムからのコールバックを期待するjettyWebサーバーが実行されています。特定の時間範囲(タイムアウト)の間にコールバックが受信されない場合、テストは失敗します。

これを実現するために、テストランナーは、ジェッティハンドラーがコールバック時に設定する「イベント」を待機する必要があります。

私はjavaのCyclicBarrierを使用することを考えましたが、これを解決するためにclojureに慣用的な方法があるのではないかと思います。

ありがとう

4

2 に答える 2

6

promiseあなたは最近あなたが尋ねたものを使うことができます:)このようなもの:

(def completion (promise))

; In test runner.
; Wait 5 seconds then fail.
(let [result (deref completion 5000 :fail)]
   (if (= result :success) 
     (println "Great!") 
     (println "Failed :(")))

; In jetty on callback
(deliver completion :success)
于 2013-02-04T17:12:20.260 に答える
3

ストレートClojureでは、未処理のコールバックを追跡するエージェントを使用することは理にかなっていますが、実際には、駆動ハンドラーでさえもかなり簡単にする非同期Webプログラミング用のライブラリであるAlephを使用することをお勧めします。リングハンドラーを生成します。これは、既存のコードにうまく適合するように聞こえます。

于 2013-02-04T17:15:05.243 に答える