我有一个包含很多Scalacheck生成器的项目正在获取GeneratorDrivenPropertyCheckFailedException,并显示消息“在0次成功的属性评估后放弃.2个评估被丢弃。”
我想让它尝试多次评估它,比如500(默认值)会很好,但是我没有看到实际使用的配置覆盖。
我将此代码添加到测试类中,我仍然收到完全相同的消息。我试过'sbt clean'只是为了确保那里没有发生奇怪的事情。
implicit override val generatorDrivenConfig = PropertyCheckConfig(minSuccessful = 1, maxDiscarded = 500, workers = 1)
为什么我的Scalacheck / Scalatest PropertyCheckConfig会被忽略?
我正在使用Scalatest 2.2.1和Scalacheck 1.12.1与Scala 2.10.4
答案 0 :(得分:13)
如果要过滤生成器(例如,使用suchThat
),则生成器可能会创建大量不满足suchThat
约束的值,因此会被丢弃。当我限制字符串的长度时,我遇到了这个问题。我可以给你的一个建议是尝试以不同的方式创建你的Gen,你不会丢弃这么多。
例如,这是我第一次生成4个字符的字符串:
val gen4CharString = Gen.listOfN(4, (Gen.listOfN[Char] suchThat (s => s != "" && s.length == 4)))
这导致过多的生成值被丢弃,导致类似于您所看到的错误。改变下面的发电机消除了这个问题。
val gen4CharString = Gen.listOfN[Char] (4, Gen.alphaChar).map (_.mkString)