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

欢迎!有关此工作的一些更多信息,请参阅 关于页面

+6
测试
重标记

设置

clojure.test 是基于这样的想法:一个测试将调用一个断言函数,该函数将直接调用一个报告函数:《code>is 调用 report(通过 do-report)。report 是一个多态方法,允许添加或覆盖键以实现替代的报告样式。它也是动态的,意在使用完全不同的报告系统时可以进行重新绑定(例如 TAP、JUnit 等)。

问题

正如在出色的 kaocha 源代码 中讨论的那样,这两种方法不能一起工作,这导致了许多问题,例如 kaocha 的解决方案(以及猴子补丁)、leiningen的猴子补丁、Cursive 的测试运行器由于绑定 report 而不总是与其他工具集成,以及其他问题。

Alessandra Sierra 在尝试 clojure.test 的后续版本 Lazytest 时(我已在去年复活),也讨论了这个问题。她最终没有完成这个库,而且 Clojure 测试的其他许多替代方案也没有像人们期望的那样成功。

鉴于 clojure.test 将一直存在,因此明智的做法是使其更容易使用和适应,而不改变基本 api。

潜在解决方案

将“要重新绑定的动态变量”与“默认报告函数”分离,可以使库和工具更容易选择扩展report或完全取代它,而不用担心它们会冲突或相互冲突。这可以通过向clojure.test添加一个新的动态变量*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
已添加。谢谢。
...