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

欢迎!请参阅 关于 页面以了解有关此工作方式的一些更多信息。

+6 投票
测试
重新标记

设置

clojure.test 建立在一个想法上,即测试将调用一个断言函数,该函数将直接调用一个报告函数:is 调用 report(通过 do-report)。函数 report 是一个多方法,允许添加或覆盖密钥以实现替代的报告样式。它也是动态的,旨在在要使用全新的报告系统(TAP、JUnit 等)时重新绑定。

问题

如优秀的 kaocha 源代码 所讨论,这两种方法不兼容,这导致用户遇到了诸如 kaocha 的解决方案(以及猴子修补)、leiningen 的猴子修补、由于绑定 report绑定),Cursive 的测试运行程序始终不与其他工具集成等问题。

Alessandra Sierra 在尝试对 clojure.test 进行后续操作并创建了名为 Lazytest(我在过去一年中将其复活)的程序时Writing 也谈到了这个问题。她最终没有完成库,以及许多用于 Clojure 测试的其他替代方案都没有像人们希望的那样成功。

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

潜在解决方案

将“要重新绑定的动态变量”从“默认报告函数”中分离出来,将使库和工具更容易选择扩展 report 或完全替换它,而无需担心它们会相互冲突或相撞。这可以通过向 clojure.test 添加一个新的动态变量 *reporter* 并使其调用 do-report 来实现,默认将 *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
已添加。谢谢。
...