如果测试设置中的任何步骤失败,我希望将其报告为失败,并停止当前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有什么好办法吗?
发布于 2017-08-10 00:28:11
您可以使用Mark的更好的进行如下操作:
(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)))))https://stackoverflow.com/questions/45602446
复制相似问题