2014-12-06 71 views
1

我正在學習Clojure,並試圖使用TDD來做這件​​事*。Midje print stacktrace測試失敗時

我使用midje作爲測試庫。到目前爲止,預期與實際結果顯示非常有幫助。

但是有沒有辦法使用clojure.tools.trace或類似的東西打印第一個測試失敗的蹤跡?

*:具體來說,我記得我看到Robert C. Martin關於轉換優先級前提的一次演講,我正在用這種方式實現一個階乘函數。雖然還沒有太多的代碼可以顯示。

回答

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