为什么我的Scalacheck / Scalatest PropertyCheckConfig被忽略了?

时间:2015-01-06 02:47:18

标签: scala testing scalatest scalacheck

我有一个包含很多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

1 个答案:

答案 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)