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

欢迎!请查看关于页面,了解更多关于这个工作方式的信息。

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


(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-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_发表

据我所知,这基本上与CLJ-866的意图相同,CLJ-866已在Clojure 1.6中完成。您现在可以使用{{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 发表

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

0

评论由:alexmiller 提出

在此补丁被预审前,需要对它进行一些修改

  • 应将补丁压缩为单个提交
  • 补丁中的提交消息应以 "CLJ-1908" 开头
  • 将 run-test* 修改为 run-test-var
  • run-test-var 的文档字符串应为:"使用 fixture 和报告运行 Var v 测试。" 删除 "调用自" 这句话。
  • run-test 的文档字符串的第一句话应为:"在当前命名空间中运行单个测试。" 删除 "这通常是从 REPL 中交互调用的。" 最后一句是好的。
  • 在 run-test 中,将 * 替换为更简单的 {{(resolve test-symbol)}}。
0

评论由: hlewisship 发表

感谢您的意见;我很快会提供一个更新的补丁。

0

评论由: hlewisship 发表

更新了补丁,已压缩并反映了 Alex 的所有评论。

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