15

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

4

1 回答 1

22

如果您正在过滤生成器(例如,通过使用 a suchThat),则生成器可能会创建大量不满足您的suchThat约束并因此被丢弃的值。当我限制字符串的长度时,我遇到了这个问题。我可以给你的一个建议是尝试用一种不同的方式来创建你的 Gen,这样你就不会丢弃这么多的 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)
于 2015-03-12T20:18:06.437 回答