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

欢迎!有关如何使用本站的信息,请参阅关于页面。

0
Spec

问题描述:启用仪器化,并使用lambda调用spec函数。为了验证lambda,spec使用生成测试来测试spec。这会导致lambda被多次调用。如果lambda发射导弹,spec现在会发射很多导弹。在许多场景中,这是不可接受的,因为它可能会导致环境崩溃。

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

想法
- 为fspec添加一个标志来禁用其验证的生成测试。

6 答案

0

由:alexmiller

为此提出了另一个选项,即根据其spec对仪器化的函数也包装函数arg。

0

由:lgs32a

@Alex Miller:我也考虑过这个方法,并认为它会更一致地处理函数如何进行instrumentation,即在调用时进行检查。

然而,我还没有提出这个方案,因为我不知道如何实现它。Spec必须能够在任何地方传递给任何arg的所有函数中通用地替换为instrumented函数,同时也必须知道使用哪些specs。怎么办?

0
by

由:lgs32a

一种可能的办法是实现将“描述性遍历”作为内部增强甚至公共增强。
spec-walk功能将像prewalk/postwalk一样工作,但它接收一个spec和一个值,并将用户提供的函数与一个(子)值及其对应的(子)spec一起调用。工具包装器可以替换值,这些值被设置在一般的instrumented fns上。每个包含其他specs的spec都必须实现通过其子项和它们的spec进行遍历的新界面方法。

0
by

由:alexmiller

是的,我们需要类似这样的东西(参见CLJ-2208以获取spec-walking的票据)。

0
by

由:lgs32a

@Alex Miller: CLJ-2208单独使用不起作用。我们需要能够使用描述数据形状的spec泛型地遍历/替换任何给定的数据结构。我应该为启动项目创建一个单独的票据并概述几个实现这些内容的方案?还是现在应该在这里讨论?

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