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

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

(run-test ex)

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

;=> 运行了 1 个包含 0 个断言的测试。
;=> 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)) ;; 这是一个具有状态的once配置
#'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

我认为能够使用is符号而不是其var来运行测试有一些优势。此外,我建议的更改还返回了与run-tests相同类型的数据。

0

评论人:alexmiller

在对修补程序进行预审之前,我需要对此做一些更改

  • 修补程序应合并为一个单独的提交
  • 修补程序中的提交信息应以"CLJ-1908"开头
  • 将run-test*更改为run-test-var
  • run-test-var的docstring应为:"使用配置和报告运行Var v中的测试。"删除"调用自"句子"。"
  • run-test的docstring的第一句话应为:"在当前命名空间中运行单个测试。"删除"这是为了从REPL中交互式调用。".最后一句话是正常的。
  • 在 run-test 中,将 * 替换为更简单的 {{(resolve test-symbol)}}。
0

评论人:hlewisship

感谢您的输入;我很快将会有一个更新补丁。

0

评论人:hlewisship

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

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