我想知道Clojure使用什么数据结构来存储使用deftest定义的测试。
我以为这是一张地图,我希望得到它的类为PersistentArrayMap,但它的出现就像它自己的类。
它在测试中使用记录吗?
user=> (use 'clojure.test)
nil
user=> (deftest test-test)
#'user/test-test
user=> (class test-test)
user$test_test当我们运行测试时,我们只提供名称空间,它如何自动识别名称空间中的所有测试并逐一运行?
这些测试是否被添加到某种类型的测试列表中,每次我们在当前命名空间中使用deftest创建测试?
发布于 2013-10-09 06:58:14
如果您引用test.clj的源代码,您可以看到deftest宏通过调用变元在当前命名空间中创建了一个var。
(defmacro deftest
[name & body]
(when *load-tests*
`(def ~(vary-meta name assoc :test `(fn [] ~@body))
(fn [] (test-var (var ~name))))))测试本身就在变量中。
运行测试相当于检查名称空间中具有:test关联的所有变量。
移除周围的胶水,使:
(doseq [v (vals (ns-interns ns))]
(when (:test (meta v))
(each-fixture-fn (fn [] (test-var v)))))https://stackoverflow.com/questions/19264681
复制相似问题