请参与 2024 年 Clojure 状态调查,分享您的想法!2024 State of Clojure Survey!

欢迎!请参阅关于页面以了解更多关于这个网站的信息。

+1
Test
已关闭
在开发代码时,有时专注于单个失败的测试比运行命名空间中的所有测试更有效。这可能是在运行测试需要一定时间或运行测试产生大量失败时的情况。目前运行单个带配置文件的测试的最佳选项是 `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


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

**建议:**一个新宏 `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 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 发布

有些补丁在通过 mvn test 执行时,在 REPL 中工作良好的事情失败了。找出原因需要一些时间。

0

评论由:hlewisship 发布

初步补丁;代码可以工作,但 mvn test 失败,还未找出原因。

0

评论由:hlewisship 发布

感谢 Hiredman,他提供了有关如何由于 Maven/Ant 运行测试而需要反引号的信息。现在所有测试都通过了。

0

评论由:hlewisship 发布

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

0

评论由:alexmiller 发布

在我将预筛此之前需要对此修正进行一些更改

  • 修补程序应压缩为单个提交
  • 修补程序的提交消息应从 "CLJ-1908" 开始
  • 将 run-test* 更改为 run-test-var
  • run-test-var 的文档字符串应为:"在 Var v 中运行带有 fixtures 的测试并生成报告。" 删除 "从调用开始" 句子"。
  • run-test 的文档字符串的第一句话应为:"在当前命名空间中运行单个测试。" 删除 "这是从 REPL 中交互式调用的。" 最后一句是好的。
  • 在 run-test 中,将 * 替换为更简单的 {{(resolve test-symbol)}}。
0

评论由:hlewisship 发布

感谢您的贡献;我将很快更新补丁。

0

评论由:hlewisship 发布

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

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