2

future を使用して並行して実行するコードがあります -

(def services [s1 s2])

(defn get-data []
  (->>
   (map #(future
            (->> (p/fetch %)
                 (p/parse %)))
        services)
   (map deref)
   (apply concat)))

(get-data)

上記のコードの要件は、2 つのサービスを並行して実行することです。(get-data)そのため、関数が両方のサービスのコードを並行して実行するかどうかを判断するテストを作成したいと考えています。そのようなテストをどのように書くのですか?

4

1 に答える 1

0

エージェントを使用して開始イベントと停止イベントをシーケンスに記録し、シーケンスを読み取って、最初の停止イベントの前に少なくとも 2 つの開始イベントが含まれていることを確認します。

 (map #(future
          (send watcher conj :start)
          (let [result (->> (p/fetch %)
                            (p/parse %))]
            (send watcher conj :finish)
            result))) 

または、 を使用with-redefsしてフェッチ関数と解析関数をラップして、テスト コードと運用コードの混合を回避できます。

于 2013-03-22T18:34:04.167 に答える