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

欢迎!有关如何工作的更多信息,请参阅关于页面。

+6
测试
重标记

设置

clojure.test 构建在这样一个概念之上,即一个测试将调用一个断言函数,该函数直接调用一个报告函数:is 调用 report(通过 do-report)。函数 report 是一个多方法(multimethod),允许通过添加或覆盖键来允许实现替代报告样式。它也是动态的,旨在如果需要使用全新的报告系统(TAP、JUnit 等)则重新绑定。

问题

如优秀 kaocha 源代码中所讨论的,这两种方法不兼容,这导致了一些问题,例如 kaocha 的解决方案(以及猴子补丁),Leiningen 的猴子补丁,Cursive 的测试运行程序由于 绑定 report 而不总是与其他工具集成,以及其他问题。

Alessandra Sierra 在尝试跟随 clojure.test 的后续项目 Lazytest(我在过去一年中将其复活)时也提到了这个问题。她最终没有完成这个库,许多其他替代 Clojure 测试的方案也没有像人们希望的那样成功。

鉴于 clojure.test 会一直存在,因此似乎明智地让它更容易使用和适应,而无需更改基本 api。

潜在解决方案

将“要重新绑定的动态变量”和“默认报告函数”分开将使库和工具更易于选择扩展 report 或完全替换它,而无需担心它们会相互冲突或重叠。这可以通过向 clojure.test 添加一个新的动态变量 *reporter* 并将 *reporter* 默认设置为 clojure.test/report 来实现。(report 将保持动态,这样就不会改变正在运行的代码。)

有了这样的改变,像 Leiningen 的 猴子补丁 这样的解决方案只需将 *report* 绑定到一个新的函数上,无需担心会影响到其他库。

by
可能对于将 clojure.test 分离成 Contrib 库并拥有一个专门的维护者会有所帮助,这样它就可以独立于 Clojure 核心库进行发展,但核心库在每个发布时还可以依赖它,以便 clojure.test 仍然是用户可覆盖的(但捆绑的)命名空间。
by
这是梦想,但在此期间,我认为这可以直接发挥作用。

1 个回答

+1 投票
by

登录为 https://clojure.atlassian.net/browse/CLJ-2882,补丁欢迎使用评估

by
添加了。谢谢。
...