首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clojure.test中谓词失败的失败与终止测试

clojure.test中谓词失败的失败与终止测试
EN

Stack Overflow用户
提问于 2017-08-10 00:05:57
回答 1查看 308关注 0票数 1

如果测试设置中的任何步骤失败,我希望将其报告为失败,并停止当前deftest块(或当前命名空间)中的任何后续测试。现在做这件事的一个方法是:

代码语言:javascript
复制
(if some-condition-is-ok
  (do
    ... do tests)
  (is (= 1 0) "Failure, condition not met")

上述情况:

  1. 如果未满足some-condition-is-ok,则报告失败
  2. 不运行任何测试,因为没有满足安装条件。

除了它不能很好地流动,而且在多种情况下也不能很好地工作。我想要的是:

代码语言:javascript
复制
(let [;; setup here...]

  (assert-or-stop-tests some-condition-is-ok)
  ... continue with tests here

有什么好办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-10 00:28:11

您可以使用Mark的更好的进行如下操作:

代码语言:javascript
复制
(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 [_ ,,,],可以定义自己的宏:

代码语言:javascript
复制
(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)))))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45602446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档