有没有办法让特定于某些测试的灯具而不是所有给定命名空间中的灯具?

时间:2016-05-24 07:01:14

标签: clojure midje clojure.test

就像midje让我们用facts形式包装with-state-changes以指定应该在它们之前,之前或之后或内容中专门运行的内容,如何使用clojure完成相同的操作。测试

1 个答案:

答案 0 :(得分:0)

clojure.test中的

fixtures是将函数作为参数,进行一些设置,调用函数,然后进行一些清理的函数。

测试(使用deftest创建)是不带参数并运行相应测试的函数。

因此,要将夹具应用于测试,您只需将该测试包装在夹具中

user> (require '[clojure.test :refer [deftest is testing]])
nil

要测试的功能:

user> (def add +)
#'user/add

对它的测试:

user> (deftest foo (is (= (add 2 2) 5)))
#'user/foo

创建一个更改数学的工具,以便测试可以通过:

user> (defn new-math-fixture [f]
        (println "setup new math")
        (with-redefs [add (constantly 5)]
          (f))
        (println "cleanup new math"))
#'user/new-math-fixture

没有夹具,测试失败:

user> (foo)

FAIL in (foo) (form-init5509471465153166515.clj:574)
expected: (= (add 2 2) 5)
  actual: (not (= 4 5))
nil

如果我们改变数学,我们的测试就可以了:

user> (testing "new math"
        (new-math-fixture foo))
setup new math
cleanup new math
nil
user> (testing "new math"
        (deftest new-math-tests
          (new-math-fixture foo)))
#'user/new-math-tests
user> (new-math-tests)
setup new math
cleanup new math
nil