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

欢迎!请参阅关于页面了解有关如何进行此操作的更多信息。

0
Spec

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

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

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

6 Answers

0

由alexmiller发表的评论

提出的另一个选项是将包装函数也被其spec包装的instrumentation。

0

由lgs32a发表的评论

@Alex Miller:我也考虑过这个选项,并认为它将与函数如何进行instrumentation保持一致,即它们在调用时进行检查。

但我还没有提出这个建议,因为我看不出我们应该如何实现。Spec需要能够生成在任意arg中传递的所有函数的instrumented版本,但还需要知道要使用哪个spec。怎么办?

0

由lgs32a发表的评论

可能的解决方案之一是在规范中实现“描述性遍历”作为内部或甚至公共增强。
规范遍历功能将像prewalk/postwalk一样工作,但它接受一个规范和一个值,并调用用户提供的函数,传递(子)值和对应的(子)规范。然后,仪器包装器可以通用地替换被fspec化的值。每个组合其他规范的规范都必须实现其子及其规范的新接口方法进行遍历。

0

由alexmiller发表的评论

是的,我们需要类似这样的东西(见CLJ-2208以获取规范遍历的票)。

0

由lgs32a发表的评论

@Alex Miller:CLJ-2208不能仅靠它。我们需要能够通用地遍历/替换任何给定数据结构,使用描述其形状的规范。我应该创建一个单独的票并概述几个启动事情的方法吗?还是目前应该在这里进行?

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