2014-12-06 9 views
1

Clojure를 배우고 있으며, TDD를 사용하려고합니다 *.테스트가 실패 할 때 Midje 스택 트레이스를 인쇄합니다.

테스트 라이브러리로 midje를 사용합니다. 지금까지 사랑해, 예상 결과 디스플레이 대 실제 결과 디스플레이는 매우 유익합니다.

그러나 clojure.tools.trace 또는 유사한 테스트를 통과 한 첫 번째 테스트의 추적을 사용하는 방법이 있습니까?

* : 특히, 변환 우선 순위 전제에 대한 Robert C. Martin의 이야기를 본 기억이 있습니다.이 방식으로 계승 함수를 구현하고 있습니다. 그러나 아직 보여줄 코드가 많지 않습니다.

답변

2

하나의 가능성은 writing your own emitter이지만 구체적인 목표를 달성하기에는 과부하 일 수 있습니다. 직접 스택 트레이스를 인쇄하는 것은 그것이 어디 근처 midje 년대를 종료하게됩니다 것을 의미

(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는하지만, 문자열을 생성한다 :

다른 방법으로는 예상 값을 포맷에 대한 책임이있는 기능을 원숭이 패치 할 수 있습니다 시험 보고서.

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