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

欢迎!请参阅关于页面以了解更多有关此内容的信息。

0
Spec

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

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

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

6 个答案

0

评论者:alexmiller

为此已提出另一个选项,即在spec中也根据其spec将函数arg包装在仪器化中。

0

评论者:lgs32a

@Alex Miller:我也考虑过这个,并认为这会更符合函数(例如,在调用时进行检查)的仪器化方式。

但是我没有提出这个想法,因为我不知道如何做。Spec必须能够通用地替换任何地方传递的任何函数参数,同时还需要知道使用哪些spec。怎么办?

0
by

评论者:lgs32a

一个可能的方案是,在规范中实现“描述性走查”作为内部甚至公共增强。
规范走查功能将类似于预走查/后走查,但它接收一个规范和一个值,并使用用户提供的函数同时调用一个(子)值和对应的(子)规范。然后,仪表包装器可以通用地替换那些被 fspec 化的值。每个组合其他规范的规范都必须实现遍历其子代及其规范的新接口方法。

0
by

评论者:alexmiller

是的,需要这样的东西(参见 CLJ-2208 获取规范走查的相关信息)。

0
by

评论者:lgs32a

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

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