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

Why is my Scalacheck/Scalatest PropertyCheckConfig being ignored?

我有一个包含很多 Scalacheck 生成器的项目,该项目正在获取带有消息 "Gave up after 0 successful property evaluations. 2 evaluations were discarded."

的 GeneratorDrivenPropertyCheckFailedException

我想让它尝试多次评估它,比如 500(默认值)就可以了,但我没有看到我的配置覆盖实际被使用。

我将此代码添加到测试中 class,但我仍然收到完全相同的消息。我试过 '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

如果您过滤生成器(例如,通过使用 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)