我正在使用Scalacheck并希望生成给定大小的集合。 scalaCheck中有一个特殊的函数,Gen.listOfN(size, Gen[T])
。
在forAll
方法中,我打印生成的集合的大小时,它并不总是具有定义的大小。实际上它只在第一次尝试时具有给定的大小。例如,尺寸6 - >第一次尝试收集的大小是6,第二次尝试的大小只有3.我做错了什么?
答案 0 :(得分:2)
听起来您可能正在使用ScalaCheck的旧版本(1.11.0之前版本)。在这些版本中,发电机边界并不总是受到尊重。
当ScalaCheck发现您的属性的测试用例失败时,它会尝试简化该测试用例(使其“更小”)。现在(版本> = 1.11.0),ScalaCheck尝试在进行此简化时尊重示例listOfN
,而不是在少于n
个项目的情况下测试列表。但是,在某些情况下,ScalaCheck仍然无法知道生成器从一开始就具有哪些边界,例如当您使用Gen.map
方法时。
有关ScalaCheck仍然可能以意外方式简化测试用例(以及您可以采取哪些措施来缓解测试用例)的案例的详细信息,请参阅:Scalacheck won't properly report the failing case