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

欢迎!请查看关于页面以获取更多关于这是一个如何工作的信息。

0
Spec

问题陈述:启用仪器,并用lambda调用一个指定的函数。为了验证lambda,spec使用生成测试对它进行测试。这会导致lambda被调用的次数增多。如果lambda发射导弹,spec现在会发射很多导弹。在不被接受的情况下有很多情景,因为它可能会崩溃环境,例如。

当前解决方案
- 不要指定lambda。缺点:Spec不能在它的spec被引用的上下文中生成它。
- 将 fspec-iterations 设置为0。缺点:禁用了所有lambda的验证。
- ???

想法
- 一个让fspec禁用其验证的生成测试的标志。

6 个答案

0

评论者:alexmiller

为解决这个问题,有人提出了另一种方案,即在仪器化的函数中用仪器包裹它的函数参数,根据它的spec。

0

评论者:lgs32a

@Alex Miller:是的,我也考虑了这一点,相信这会更符合函数的仪器化工作方式,即它们在调用时进行检查。

然而我没有提出这个方案,因为我不知道我们应该如何实现它。Spec必须能够通用地替换在任意位置的任意参数中的所有函数,并且还需要知道使用哪些spec。如何呢?

0

评论者:lgs32a

一种可能的方案是在spec中实现“描述性遍历”作为内部甚至公共增强。
Spec-walk功能的工作方式类似于prewalk/postwalk,但它接受一个spec和一个值,并使用用户提供的函数(子值)及其对应的(子)spec调用它。仪器包装器可以随后将fspecened的值用泛型的仪器函数替换。每个由其他spec组成的spec都必须实现一个新的接口方法来遍历其子spec及其子项。

0

评论者:alexmiller

是的,需要类似这样的东西(见CLJ-2208有关spec遍历的票证)。

0

评论者:lgs32a

@Alex Miller:CLJ-2208不能单独完成。我们需要能够通用地遍历/替换任何给定的数据结构,使用描述其形状的spec。我应该创建一个单独的票证并概述一些启动事情的方法吗?还是现在应该在这里完成?

0
参考:[https://clojure.atlassian.net/browse/CLJ-2217](https://clojure.atlassian.net/browse/CLJ-2217)(由lgs32a报告)
...