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

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

+6
测试
重新标记

设置

clojure.test 结语在于一个测试将调用断言函数,该函数直接调用一个报告函数:is 调用 report(通过 do-report)。函数 report 是一个多方法,允许添加或覆盖键来允许实现替代报告样式。它也是动态的,目的是在进行完整的报告系统(TAP、JUnit 等)时重新绑定。

问题

如在中出色的 kaocha 源代码 中 所讨论,这两种方法不兼容,导致诸如 kaocha 的修补程序(和猴子补丁),leiningen 的猴子补丁,Cursive 的测试运行程序由于 绑定 report 而不总是与其他工具集成,以及 其他问题。

Alessandra Sierra 曾在这 问题 上出过一本叫 Lazytest 的 clojure.test 的后续之作(我在过去的一年中已经使其复活)。她最终未能完成这个库,并且许多其他的 Clojure 测试替代品也没有像人们希望的那样成功。

鉴于 clojure.test 将一直存在,为了在不更改基本 API 的情况下使其更容易使用和适应,似乎是明智的。

潜在解决方案

将 "要重新绑定的动态变量" 与 "默认报告函数" 分离,将使库和工具更容易选择扩展 report 或完全替换它,而不用担心它们会冲突或互相干扰。这可以通过向 clojure.test 添加一个新的动态变量 *reporter* 并将 *reporter* 默认为 clojure.test/report 来实现。(report 将保持动态,这将不改变代码的正常工作。)

在实施这样的变更后,解决方案如Leiningen的猴子补丁(monkey-patching)可以简单地绑定*report*到一个新函数,而不用担心会影响到其他库。

by
可能有助于将clojure.test作为贡献库分离出来,并拥有专门的维护者,这样它就可以独立于Clojure核心进行演变,但核心在每次发布时仍然可以依赖它,这样clojure.test就会成为用户的一个打包(但可覆盖)的命名空间。
by
这是梦想,但与此同时,我觉得这直接是有用的。

1 个回答

+1
by

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

by
已添加。谢谢。
...