【发布时间】:2016-04-21 02:12:26
【问题描述】:
我可以找到许多设置生成器最大大小的示例,但是如何生成介于最小和最大长度之间的列表?
【问题讨论】:
标签: unit-testing scalatest scalacheck property-based-testing
我可以找到许多设置生成器最大大小的示例,但是如何生成介于最小和最大长度之间的列表?
【问题讨论】:
标签: unit-testing scalatest scalacheck property-based-testing
关于生成器的一个简洁属性是它们是可组合的,因此您可以使用listOfN 生成器简单地为您的列表长度组合一个生成器。
for {
numElems <- Gen.choose(5, 12)
elems <- Gen.listOfN(numElems, elemGenerator)
} yield elems
【讨论】:
listOfN 中的 N 被描述为 Generates a list with at most the given number of elements ...意思是无论 N 是 5 还是 12,您仍然可以获得以下列表3个元素。或者一个空列表,就此而言。
buildableOfN,如果容器强制元素唯一性(如集合或地图),它可以生成小于指定大小的容器。 List 不是这种情况,我找到的所有文档都指定生成的列表的长度恰好是指定的 N
我在这里唤醒了鬼魂,但万一有人来:
根据我对已接受答案的评论,该解决方案随机决定 5 到 12 之间的最大长度,但在这种情况下,生成列表的实际大小仍可能为 0(零)或低于 5 的任何值。
我认为以下内容符合 OP 的描述:
Gen
.listOfN(12, elemGenerator)
.suchThat(_.size >= 5)
如果有一个 API 可以方便地生成这个,或者说一个精确大小的列表,N,那就太棒了。
【讨论】: