1

我正在使用 Scalacheck 并希望生成给定大小的集合。scalaCheck 中有一个特殊的功能Gen.listOfN(size, Gen[T])。当forAll我在方法中打印生成的集合的大小时,它并不总是具有定义的大小。实际上,它仅在第一次尝试时具有给定的大小。例如,大小 6 --> 第一次尝试收集的大小是 6,第二次尝试大小只有 3。我做错了什么?

4

1 回答 1

2

听起来您可能正在使用旧的(1.11.0 之前)版本的 ScalaCheck。在这些版本中,生成器边界并不总是得到尊重。

当 ScalaCheck 为您的属性找到失败的测试用例时,它会尝试简化该测试用例(使其“更小”)。如今(版本 >= 1.11.0),ScalaCheck 在进行这种简化时尝试尊重例如listOfN,而不是测试少于n项目的列表。然而,在某些情况下,ScalaCheck 仍然不可能知道生成器从一开始就具有哪些边界,例如当您使用该Gen.map方法时。

有关 ScalaCheck 仍然可能以意想不到的方式简化测试用例的情况的更多信息(以及您可以采取哪些措施来减轻它),请参阅:Scalacheck 不会正确报告失败的情况

于 2014-01-11T12:10:20.357 回答