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

欢迎!请查看 关于 页面以了解更多关于该网站如何运作的信息。

+6
测试
重新标记

设置

clojure.test 构建在这样一个想法之上:测试会调用一个断言函数,该函数直接调用报告函数:is 调用 report(通过 do-report)。函数 report 是一个多方法,允许添加或覆盖键以允许实现不同的报告风格。它还动态,如果需要使用全新的报告系统(TAP、JUnit 等),则可以重绑定。

问题

如优秀的 kaocha 源代码 所述,这两种方法不兼容,这导致了诸如 kaocha 的解决方案(以及猴子修补)、Leiningen 的猴子修补、Cursive 的测试运行器不总是与其他工具集成的< a rel="nofollow" href="https://clojurians.slack.com/archives/C0744GXCJ/p1720462210536379?thread_ts=1713354339.092179&cid=C0744GXCJ" target="_blank">绑定 report 等问题,以及其他问题。

Alessandra Sierra 在尝试对 clojure.test 的后续操作时也讨论了这个问题,她创建了一个名为 Lazytest 的测试框架(我在过去一年中将其复活)。她最终没有完成库的工作,并且Clojure测试的其他替代品也没有像人们所希望的那样成功。

鉴于 clojure.test 将会继续使用,因此似乎明智的做法是使其更容易使用和适应,而不改变其基本API。

潜在解决方案

将“动态变量以供重绑定”与“默认报告函数”分开,将使库和工具更容易选择扩展 report 或完全替换它,而无需担心它们是否会冲突或相互干扰。这可以通过向 clojure.test 添加一个新的动态变量 *reporter* 实现,该变量由 do-report 调用,并将 *reporter* 默认设置为 clojure.test/report。(report 将保持动态,以避免更改现有代码。)

在实施此类更改后,Leiningen 等猴子修补 工作区可以简单地绑定 *report* 并使用新的函数,而无需担心会踩到其他Library的脚跟。

by
可能将clojure.test作为一个贡献库独立出来,并设立专门的维护者会比较有用,这样它就可以独立于Clojure核心库进化,但核心库在每个发布版本中仍然可以依赖于它,使得clojure.test仍然对用户来说是一个捆绑(但可覆盖)的命名空间。
by
这虽然是个美好的愿景,但现阶段我认为这直接实施会更有帮助。

1 答案

+1
by

https://clojure.atlassian.net/browse/CLJ-2882 上已记录,欢迎提供补丁进行评估

by
已添加。谢谢。
...