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

欢迎!请参阅关于页面以了解更多关于如何使用此功能的信息。

+1
测试
closed
在开发代码时,专心于单个失败的测试,而不是在一个命名空间中运行所有测试,这种情况有时是有效的。当运行测试需要一些时间,或者运行测试会产生大量失败时,这种情况尤为如此。目前运行单个带有固定设施的测试的最佳选项是 `test-vars` à


(使用 'clojure.test)
(定义 counter (原子 0))
(定义 n [f] (交换! counter inc) (f)) ;;一个带有状态的:once 固定设施
(使用固定设施 :once setup)
(定义测试 ex (打印 "计数器=" @(counter)))

(测试变量 [#'ex])  ;=> 计数器 = 1
(测试变量 [#'ex])  ;=> 计数器 = 2


但是,这有几个问题
- 没有类似 run-tests 的测试报告反馈(成功时没有输出)
- 需要指定定义在向量中的变量(而不是符号)

*建议:* 一个新的宏 `run-test`,它指定一个符号,并提供与 `run-tests` 相同的测试报告功能。用法


(使用 'clojure.test)
(定义 counter (原子 0))
(定义 n [f] (交换! counter inc) (f)) ;;一个带有状态的:once 固定设施
(使用固定设施 :once setup)
(定义测试 ex (打印 "计数器=" @(counter)))

(运行测试 ex)

;=> 测试用户
;=> 计数器 = 1

;=> 运行 1 个包含 0 个断言的测试。
;=> 0 个 failures,0 个 errors。
;=> {:test 1, :pass 0, :fail 0, :error 0, :type :summary}

(运行测试 ex)

;=> 测试用户
;=> 计数器 = 2

;=> 运行 1 个包含 0 个断言的测试。
;=> 0 个 failures,0 个 errors。
;=> {:test 1, :pass 0, :fail 0, :error 0, :type :summary}



*补丁:* CLJ-1908-3.patch

*Screened:* 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 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 发表的评论

我在修补时遇到了麻烦,即在 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 中运行测试,使用 fixture 并报告。" 删除 "from called" 句子。
  • run-test 的文档字符串的第一句应为:"在当前命名空间中运行单个测试。" 删除 "这是用于交互式调用的,从 repl 中调用。" 最后一句是正确的。
  • 在 run-test 中,将 * 替换为更简单的 {{(resolve test-symbol)}}。
0

由 hlewisship 发表的评论

感谢您的建议;我会很快更新补丁。

0

由 hlewisship 发表的评论

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

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