Midje печать стека трассировки при сбое теста

Я изучаю Clojure и пытаюсь использовать TDD для этого *.

Я использую Midje в качестве библиотеки тестирования. Очень нравится, что отображение ожидаемых и фактических результатов очень полезно.

Но был ли способ использовать clojure.tools.trace или что-то подобное, чтобы напечатать след первого теста, который не проходит?

*: В частности, я помню выступление Роберта К. Мартина о предпосылке приоритета преобразования, и я реализую факториальную функцию таким образом. Хотя пока не так много кода для показа.

1 ответ

Решение

Одной из возможностей может быть написание собственного эмиттера, но это может быть излишним для вашей конкретной цели.

В качестве альтернативы, вы можете обезопасить функцию, отвечающую за форматирование ожидаемых значений:

(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.>
Другие вопросы по тегам