请在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


但是,这有以下问题
- 没有像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(Clojure 1.6中完成)的意图相同。现在您可以使用{{test-vars}}做这件事


用户=> (use 'clojure.test)
nil
user=> (def counter (atom 0))
#'user/counter
user=> (defn setup [f] (swap! counter inc) (f)) ;; —次仅使用一次的具有状态的工具
#'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

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

0 投票

评论者:alexmiller

在我对它进行预筛查之前,这个补丁需要一些更改

  • 补丁应该压缩为单个提交
  • 补丁的提交消息应该以 "CLJ-1908" 开头
  • 将run-test*更改为run-test-var
  • run-test-var的文档字符串应该是: "在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 报告)
...