如果我的测试设置中的任何步骤失败,我想将此报告为失败,并停止当前deftest
块(或当前命名空间)中的任何后续测试。现在就这样做的一种方法是:
(if some-condition-is-ok
(do
... do tests)
(is (= 1 0) "Failure, condition not met")
以上:
some-condition-is-ok
则报告失败除了它不能很好地流动,并且在多种情况下不能很好地工作。我喜欢这样的事情:
(let [;; setup here...]
(assert-or-stop-tests some-condition-is-ok)
... continue with tests here
有关干净方法的任何想法吗?
答案 0 :(得分:1)
你可以使用Mark Engelberg的better-cond:
(require '[better-cond.core :as b]
'[clojure.test :refer [is]])
(def some-condition-is-ok true)
(def some-other-condition-is-ok false)
(deftest a-test
(b/cond
:let [#_"setup here..."]
:when (is some-condition-is-ok)
:let [_ (is (= 0 1))]
:when (is some-other-condition-is-ok)
:let [_ (is (= 1 2))]))
或者如果你想避开:let [_ ,,,]
,你可以定义自己的宏:
(defmacro ceasing [& exprs]
(when-let [[left & [right & less :as more]] (seq exprs)]
(if (= :assert left)
`(when (is ~right)
(ceasing ~@less))
`(do
~left
(ceasing ~@more)))))
(deftest b-test
(let [#_"setup here..."]
(ceasing
:assert some-condition-is-ok
(is (= 0 1))
:assert some-other-condition-is-ok
(is (= 1 2)))))