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

Clojure 测试失败时Midje打印堆栈跟踪,clojure,trace,midje,Clojure,Trace,Midje,我正在学习Clojure,并尝试使用TDD来做到这一点* 我使用midje作为测试库。到目前为止,预期结果与实际结果的对比显示非常有用 但是有没有一种方法可以使用clojure.tools.trace或类似的方法来打印第一个失败测试的跟踪 *:具体地说,我记得看过Robert C.Martin关于转换优先级前提的演讲,我正以这种方式实现阶乘函数。虽然还没有太多的代码可供展示。一种可能是,但对于您的特定目标来说,这可能是过分的 或者,您可以对负责格式化预期值的函数进行修补: (require '[

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

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

但是有没有一种方法可以使用
clojure.tools.trace
或类似的方法来打印第一个失败测试的跟踪

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

一种可能是,但对于您的特定目标来说,这可能是过分的

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

(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
必须生成一个字符串,这意味着直接打印stacktrace将使其无法接近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.>
user=>(事实(抛出(异常。“khaaaaaaan”)=>:不是汗)
未能通过(表格-init4689442922606051135.clj:1)
预期:不是汗
实际情况:这是你的例外#