编写测试以确定代码是否正在并行执行(将来)

时间:2013-03-22 13:47:45

标签: clojure

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

(def services [s1 s2])

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

(get-data)

上述代码的要求是并行运行两个服务。所以我想创建一个测试,确定函数(get-data)是否并行运行两个服务的代码。怎么写这样的测试?

1 个答案:

答案 0 :(得分:0)

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

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

或者您可以使用with-redefs来包装您的获取和解析函数,以避免混合测试和生产代码。