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_做出的评论

据我所知,这基本上与已于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
by

评论由:hlewisship发表

与补丁有关的问题,在REPL中运行正常,但在通过mvn test执行时失败。找出原因需要一些时间。

0
by

评论由:hlewisship发表

初始补丁;代码可以工作,但mvn test失败了,还没有弄清楚原因。

0
by

评论由:hlewisship发表

感谢Hiredman,提供了有关如何由于Maven/Ant测试运行方式的见解。所有测试现在都通过。

0
by

评论由:hlewisship发表

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

0
by

评论由:alexmiller发表

在我预审此补丁之前需要对此进行一些更改

  • 补丁应压缩成一个单独的提交
  • 补丁的提交消息应以"CLJ-1908"开头
  • 将run-test*改为run-test-var
  • run-test-var的文档字符串应该是:"使用设施和报告运行变量v中的测试。" 删除"称为"的句子"。
  • run-test 的文档字符串的第一句应该是:"在当前命名空间中运行单个测试。" 删除 "此命令旨在通过交互式方式、从REPL中调用。" 最后一句保持不变。
  • 在 run-test 中,将 * 替换为更简单的 {{(resolve test-symbol)}}。
0

评论由:hlewisship发表

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

0

评论由:hlewisship发表

更新了补丁,合并了 Alex 的所有意见。

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