clojure.test中谓词失败的Fail和Stop测试
如果测试设置中的任何步骤失败,我希望将其报告为失败,并停止当前clojure.test中谓词失败的Fail和Stop测试,clojure,Clojure,如果测试设置中的任何步骤失败,我希望将其报告为失败,并停止当前deftest块(或当前命名空间)中的任何后续测试。现在有一种方法可以做到这一点: (if some-condition-is-ok (do ... do tests) (is (= 1 0) "Failure, condition not met") 上述: 如果某些条件正常未满足,则报告故障 不运行任何测试,因为不满足设置条件 除了它不能很好地流动,而且在多种情况下也不能很好地工作。我想要一些像: (let [;
deftest
块(或当前命名空间)中的任何后续测试。现在有一种方法可以做到这一点:
(if some-condition-is-ok
(do
... do tests)
(is (= 1 0) "Failure, condition not met")
上述:
某些条件正常
未满足,则报告故障(let [;; setup here...]
(assert-or-stop-tests some-condition-is-ok)
... continue with tests here
有什么干净的方法可以做到这一点吗?你可以用马克·恩格尔伯格的:
(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)))))
它似乎是一个不错的候选者,因为它除了clojure core之外没有其他依赖项,尽管我仍然不喜欢
:let
绑定外观。向上投票,因为这是一个合理的选择,谢谢你的回答Sam@Josh我已经更新了我的答案以回应你的两个评论。以前它确实有Clojure core以外的依赖项(即better cond),但我重写了停止宏而不使用better cond,并删除了:let
绑定。谢谢Sam--我将暂时保留此选项,以鼓励其他答案,但我想继续,感谢您修改它