我正在使用Scalacheck,并希望生成给定大小的集合。在scalaCheck中有一个特殊的函数Gen.listOfN(size, Gen[T])。在forAll方法中,我打印生成的集合的大小,它并不总是具有定义的大小。实际上,它在第一次尝试时只有给定的大小。例如,size 6 -->第一次尝试采集的大小是6,第二次尝试的大小只有3,我哪里做错了?
发布于 2014-01-11 20:10:20
听起来您可能使用的是旧版本(1.11.0之前)的ScalaCheck。在这些版本中,生成器的边界并不总是得到尊重。
当ScalaCheck为您的属性找到失败的测试用例时,它会尝试简化该测试用例(使其“更小”)。如今(版本>= 1.11.0),ScalaCheck在进行这种简化时会尝试遵守例如listOfN,而不是包含少于n项的测试列表。然而,在某些情况下,例如当您使用Gen.map方法时,ScalaCheck仍然不可能从一开始就知道生成器具有什么边界。
有关ScalaCheck仍然可能以意想不到的方式简化测试用例的情况的更多信息(以及您可以采取哪些措施来缓解这种情况),请参阅:Scalacheck won't properly report the failing case
https://stackoverflow.com/questions/21052403
复制相似问题