请在2024 Clojure状态调查!分享您的想法。

欢迎!有关此网站如何工作的更多信息,请查看关于页面。

+1 投票
测试
已关闭
在开发代码时,有时关注一个单独的失败的测试比运行一个命名空间中的所有测试更有效。这可能是运行的测试需要一些时间或运行测试产生大量失败时的情况。目前运行单个测试的最佳选项是`test-vars`如下


(use 'clojure.test)
(def counter (atom 0))
(defn setup [f] (swap! counter inc) (f)) ;; 一个带状态的 :once 固定装置
(use-fixtures :once setup)
(deftest ex (println "counter =" @counter))

(test-vars [#'ex])  ;=> counter = 1
(test-vars [#'ex])  ;=> counter = 2


然而,这有以下问题
- 无测试报告反馈,如运行-tests 所获得(在成功时没有输出)
- 需要指定变量(而不是符号),并用向量包装

*建议:* 一个新的宏 `run-test`,指定单个符号,并且可以获得与 `run-tests` 相同的测试报告。用法


(use 'clojure.test)
(def counter (atom 0))
(defn setup [f] (swap! counter inc) (f)) ;; 一个带状态的 :once 固定装置
(use-fixtures :once setup)
(deftest ex (println "counter =" @counter))

(run-test ex)

;=> 测试用户
;=> counter = 1

;=> 执行了包含 0 个断言的 1 个测试。
;=> 0 个失败,0 个错误。
;=> {:test 1, :pass 0, :fail 0, :error 0, :type :summary}

(run-test ex)

;=> 测试用户
;=> counter = 2

;=> 执行了包含 0 个断言的 1 个测试。
;=> 0 个失败,0 个错误。
;=> {:test 1, :pass 0, :fail 0, :error 0, :type :summary}



*补丁:* CLJ-1908-3.patch

*筛选:* Alex Miller
已关闭,并附带以下说明: 已在 1.11.0-alpha2 中修复

9 个答案

+1 投票
_评论者:alexmiller_

据我所知,这与Clojure 1.6中完成的CLJ-866基本具有相同的意图。现在您可以使用{{test-vars}}做这个操作。


user=> (use 'clojure.test)
nil
user=> (def counter (atom 0))
#'user/counter
user=> (defn setup [f] (swap! counter inc) (f)) ;; 一个一次性的带状态 fixture
#'user/setup user=> (use-fixtures :once setup) {:clojure.test/once-fixtures (#object[user$setup 0x7106e68e "user$setup@7106e68e"])} user=> (deftest ex (println "counter=" @counter)) #'user/ex user=> (test-vars [#'ex])
counter = 1
nil
user=> (test-vars [#'ex])
counter = 2
nil
0

评论者:hlewisship

补丁存在一些问题,在REPL中运行正常但在通过mvn test执行时不起作用。追踪原因需要一些时间。

0

评论者:hlewisship

初始补丁;代码可用,但mvn test失败,尚未找到原因。

0

评论者:hlewisship

感谢Hiredman,已经提供了关于Maven/Ant运行测试时需要使用反引号的一些见解。现在所有测试都通过了。

0

评论者:hlewisship

我认为能够使用符号而不是变量执行测试具有一定的优势。此外,我提出的更改也会像run-tests一样返回相同类型的数据。

0

评论者:alexmiller

在我预筛此补丁之前,需要进行一些修改

  • 补丁应该压缩成一个单独的提交
  • 补丁的提交信息应以 "CLJ-1908" 开始
  • 将 run-test* 改为 run-test-var
  • run-test-var的文档字符串应该是:"在Var v中以固定件运行测试并报告。" 移除"调用自"句子。
  • run-test文档字符串的第一句话应该是:"在当前命名空间中运行单个测试。" 移除"This is meant to be invoked interactively, from a REPL."最后一句是正确的。
  • 在run-test中,将*替换为更简单的{{(resolve test-symbol)}}。
0

评论者:hlewisship

感谢您的反馈;我将很快提供更新的补丁。

0

评论者:hlewisship

更新后的补丁,合并了Alex的所有评论。

0
参考资料:https://clojure.atlassian.net/browse/CLJ-1908(由hlewisship报告)
...