问题标签 [test.check]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
480 浏览

clojure - 使用 test.check 生成结构化地图

我正在使用 test.check,并且正在测试一个将地图作为参数的函数。这些映射确实具有定义的结构,例如:

关键点,有一组预期的键,其值具有不同的明确定义的生成器。

我看了看gen/map,但如何将它用于更结构化的键/值对并不明显:

这似乎是一个简单的场景,但找不到 示例

如何使用 test.check 生成结构化地图,例如此处描述的地图?

0 投票
2 回答
331 浏览

clojure - 如何以受约束的顺序为一系列操作创建 test.check 生成器?

作为两个生成器的示例:

ACTIONS是一个映射,其中键是操作的名称,值是该操作的(或基于)依赖项。举个例子,你必须:create-new-user先做任何事,你必须:create-new-board先做:edit-board,你必须至少有一个:create-new-*-comment,然后才能做:edit-comment-text

上面的代码似乎工作,但它是丑陋的。1)我不喜欢filter-actions-into-logical-order代码必须有一个特定的例外:create-new-user。2)我不喜欢这样,我基本上是在随机操作列表中,并对其进行过滤,直到这些操作变得有序为止。

我想知道其他人如何使用 test.check 生成这样的一系列动作?当然必须有一种方法可以只使用生成器吗?

0 投票
2 回答
1452 浏览

clojure - 如何在 Clojure 中生成可以与 test.check 一起使用的 UUID

生成式测试似乎很有趣,但我需要生成随机 UUID 作为测试的一部分。java.util.UUID/newRandom 对 test.check 缩小效果不佳。

Java 代码如下所示:

翻译成 Clojure 比看起来更棘手。

如何在 Clojure 中编写一个可以成功收缩的随机 UUID 函数?

0 投票
1 回答
122 浏览

clojure - 使用 test.check 生成排序数据

我想使用 test.check 来生成表单的排序时间序列数据

[ [timestamp value] [timestamp value] ..]

其中时间戳,值对按时间戳升序排列。

我可以轻松地以随机顺序生成此类数据

(gen/tuple timestamp gen/int)timestamp例如在哪里(gen/choose 1412664660 1423419720)

我应该如何生成排序数据?

0 投票
0 回答
50 浏览

unit-testing - 如何使用 test.check 生成具有特定属性(如 stddev)的集合

我想使用 clojure 的test.check库来生成可以做一些简单统计的集合,比如计算平均值、标准差、置信区间等等。

如何生成集合,以便它们具有这些属性的预定值?

0 投票
2 回答
219 浏览

clojure - test.check:'properties/for-all' 中的 let 样式行为

在这个问题和那里引用的博客文章之后,有没有理由prop/for-all不直接加入这种能力?例如:

基本上,我想在另一个生成器中重用一个生成器生成的,然后引用实际测试代码中生成的两个值。这将本质上扩展糖/魔术,for-all以允许在宏提供的 let-like 块中引用生成的值,因为它在下面的表达式块中工作。

请让我知道我是否遗漏了其他使这成为可能的东西,或者由于某种原因实施起来没有意义。

0 投票
1 回答
95 浏览

clojure - test.check 生成具有不同节点类型的树

我想生成具有不同节点类型的树。对于每个节点类型,都有可能成为该节点子节点的节点类型的不同可能组合。任何节点类型都可能没有子节点。

recursive-gen从本质上迫使我从里到外构建树,从一个叶生成器开始,该生成器生成一个没有子节点的任何类型的节点。从子生成器创建生成器的函数本质上必须生成所需的父节点类型并such-that在子生成器上使用,直到它生成所需的子节点类型。这通常会导致运行时错误,说such-that在 10 次尝试后失败。

由于无法从父生成器参数化子生成器,有哪些替代选项?

0 投票
3 回答
1682 浏览

clojure - test.check 生成一定长度的字符串

在使用 test.check 时,我需要一个生成器来生成一定长度的字符串。电话号码、邮政编码、社会安全号码都是此类数据的示例。尽管这些示例似乎只是数字,但我的问题是一般的字符串。

0 投票
1 回答
162 浏览

clojure - test.check 中的循环和状态管理

随着 Spec 的引入,我尝试为我的所有函数编写 test.check 生成器。这对于简单的数据结构来说很好,但对于具有相互依赖的部分的数据结构来说往往会变得困难。换句话说,然后需要在生成器中进行一些状态管理。

拥有 Clojure 的循环/递归或归约的生成器等效项已经非常有帮助,因此在一次迭代中产生的值可以存储在某个聚合值中,然后在后续迭代中可以访问。

需要这样做的一个简单示例是编写一个生成器,用于将集合拆分为恰好 X 个分区,每个分区具有零到 Y 之间的元素,然后将元素随机分配给任何分区。(注意test.chuck'partition函数不允许指定 X 或 Y)。

如果您通过循环遍历集合来编写此生成器,那么这将需要访问在先前迭代期间填充的分区,以避免超过 Y。

有人有什么想法吗?我发现的部分解决方案:

  • test.checkletbind允许您生成一个值,然后稍后重用该值,但它们不允许迭代。

  • tuple您可以使用和函数的组合遍历先前生成的值的集合bind,但这些迭代无权访问先前迭代期间生成的值。

    (defn bind-each [k coll] (apply tcg/tuple (map (fn [x] (tcg/bind (tcg/return x) k)) coll))

  • 您可以使用原子(或挥发物)来存储和访问在先前迭代期间生成的值。这可行,但非常不符合 Clojure,特别是因为您需要reset!在返回生成器之前使用 atom/volatile,以避免它们的内容在生成器的下一次调用中被重用。

  • 生成器因其bindreturn函数而类似于 monad,这暗示了将诸如 Cats 之类的 monad 库与 State monad 结合使用。但是,State monad 在 Cats 2.0 中被删除(因为据称它不适合 Clojure),而我知道的其他支持库没有正式的 Clojurescript 支持。此外,在他自己的库中实现 State monad 时,Clojure 的 monad 专家之一 Jim Duey 似乎警告说 State monad 的使用与 test.check 的收缩不兼容(参见http://www. clojure.net/2015/09/11/Extending-Generative-Testing/),这大大降低了使用 test.check 的优点。

0 投票
2 回答
108 浏览

clojure - test.check 中的函数生成器

我想为函数制作一个生成器。

我注意到确实有IFn值的生成器,但是当函数域是无限的(并且由于值是严格的)时,将它们用作函数的生成器通常是不切实际的。

这个功能是否存在或者我必须自己实现它?