2

我有一段代码,我使用未来并行运行 -

(def services [s1 s2])

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

(get-data)

上面这段代码的要求是并行运行两个服务。所以我想创建一个测试来确定函数是否(get-data)并行运行这两个服务的代码。如何编写这样的测试?

4

1 回答 1

0

使用代理将启动和停止事件记录到一个序列中,然后读取该序列以确保它在第一个停止事件之前至少包含两个启动事件。

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

或者您可以使用with-redefs包装您的 fetch 和 parse 函数以避免混合测试和生产代码。

于 2013-03-22T18:34:04.167 回答