1

我正在学习 Clojure,并尝试使用 TDD 来做到这一点 *.

我使用 midje 作为测试库。到目前为止喜欢它,预期与实际结果的显示非常有帮助。

但是有没有办法使用clojure.tools.trace或类似的方法来打印第一个失败的测试的痕迹?

*:具体来说,我记得看过 Robert C. Martin 关于转换优先级前提的演讲,我正在以这种方式实现阶乘函数。虽然还没有多少代码可以显示。

4

1 回答 1

2

一种可能性是编写您自己的发射器,但这对于您的特定目标可能是矫枉过正。

或者,您可以对负责格式化预期值的函数进行猴子修补:

(require '[midje.util.exceptions :as e]
         '[midje.emission.plugins.util :as u])

(defn- format-captured-throwable
  [ex]
  (if (e/captured-throwable? ex)
    ;; ... adjust this to your needs ...
    (pr-str 'this-is-your-exception (e/throwable ex))))

(alter-var-root
  #'u/attractively-stringified-value
  (fn [f]
    #(or (format-captured-throwable %) (f %))))

format-captured-throwable但是,必须生成一个字符串,这意味着直接打印堆栈跟踪将使其最终与 midje 的测试报告相去甚远。

user=> (fact (throw (Exception. "khaaaaaaaan.")) => :not-khan)

FAIL at (form-init4689442922606051135.clj:1)
    Expected: :not-khan
      Actual: this-is-your-exception #<Exception java.lang.Exception: khaaaaaaaan.>
于 2014-12-06T17:35:20.297 回答