使用fixture从REPL运行一个Clojure测试(不是在一个名称空间中运行所有测试)



我如何从Clojure REPL运行一个测试(不是整个命名空间)?

我试过直接调用该函数,例如(the-ns/the-test),但我需要先运行固定装置。所以我想找到一种从clojure.test开始测试的方法。

这是接近的,但不是我想要做的匹配:https://stackoverflow.com/a/24337705/109618

我没有看到任何关于如何从clojure中做到这一点的提及。测试API。

在Clojure 1.6中添加了一个新函数来支持这一点。clojure。Test/Test -vars将运行一个或多个带有fixture的测试变量。

我认为应该这样做:

(clojure.test/test-vars [#'the-ns/the-test])

在命名空间中运行单个测试:

lein test :only namespace_name/testname

在一个命名空间中运行所有测试

lein test :only namespace_name

如果您不介意不运行fixture,您可以在调用run-tests之前执行以下操作:

(defn test-ns-hook []
  (my-test))

要删除钩子,可以执行

(ns-unmap *ns* 'test-ns-hook)

如果您仍然需要您的fixture并希望使用一个测试名称空间,您可以添加一个ns-unmap来删除所有您不想从名称空间中运行的测试/fixture,然后再运行您的测试,例如:

(doseq [v (keys (ns-publics 'my-ns))]
  (let [vs (str v)]
    (if (.startsWith vs "test-") (ns-unmap 'my-ns v))))

使用多个名称空间可能更容易,其中一个名称空间包含所有测试和fixture,而在其他名称空间refer中包含您想要从主测试名称空间运行的测试和fixture。然后,您可以使用ns切换到一个特定的测试名称空间,或者将您想要测试的名称空间传递给run-tests:

(ns test-main
  (:require [clojure.test :refer :all]))
(deftest addition
  (is (= 4 (+ 2 2)))
  (is (= 7 (+ 3 4))))
(deftest subtraction
  (is (= 1 (- 4 3)))
  (is (= 3 (- 7 4))))
(run-tests)
;Runs all the tests
(ns test-specific
(:require [clojure.test :refer :all]
          [test-main :refer :all]))
(deftest arithmetic
  (subtraction))
(run-tests)
;Just runs the tests you want

clojure的一个很好的替代方案。测试(如果您可以添加额外的依赖是eftest)。这个库是一个可选的运行程序(它与clojure.test兼容)。它有灵活的测试选择器(即按文件夹、按命名空间、按var)。

在REPL中,您可以执行如下操作:

(require '[eftest.runner :refer [find-tests run-tests]]) (run-tests (find-tests #'foo.bar/baz))

见https://github.com/weavejester/eftest

最新更新