当测试失败时,Midje打印堆栈跟踪

时间:2014-12-06 14:41:24

标签: clojure trace midje

我正在学习Clojure,并试图使用TDD这样做*。

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

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

*:具体来说,我记得看过Robert C. Martin关于转换优先级前提的讲话,并且我以这种方式实现了阶乘功能。但是,还没有很多代码要显示。

1 个答案:

答案 0 :(得分:2)

一种可能性是writing your own emitter,但这可能对您的具体目标而言过度。

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

(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.>