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

myy*_*yyk 10 testing scala scalatest scalacheck

我有一个包含很多Scalacheck生成器的项目正在获取GeneratorDrivenPropertyCheckFailedException,并显示消息"在0次成功的属性评估后放弃.2个评估被丢弃了."

我想让它尝试评估它多次像500(默认值)会好,但我没有看到我的配置覆盖实际使用.

我将此代码添加到测试类中,我仍然得到完全相同的消息.我试过'sbt clean'只是为了确保那里没有发生奇怪的事情.

implicit override val generatorDrivenConfig = PropertyCheckConfig(minSuccessful = 1, maxDiscarded = 500, workers = 1)
Run Code Online (Sandbox Code Playgroud)

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

我正在使用Scalatest 2.2.1与Scalacheck 1.12.1和Scala 2.10.4

Ram*_*ony 16

如果要过滤生成器(例如,使用a suchThat),则生成器可能会创建大量不满足suchThat约束的值,因此会被丢弃.当我限制字符串的长度时,我遇到了这个问题.我可以给你的一个建议是尝试以不同的方式创建你的Gen,你不会丢弃这么多.

例如,这是我第一次生成4个字符的字符串:

val gen4CharString = Gen.listOfN(4, (Gen.listOfN[Char] suchThat (s => s != "" && s.length == 4)))
Run Code Online (Sandbox Code Playgroud)

这导致过多的生成值被丢弃,导致类似于您所看到的错误.如下改变发电机消除了这个问题.

val gen4CharString = Gen.listOfN[Char] (4, Gen.alphaChar).map (_.mkString)
Run Code Online (Sandbox Code Playgroud)

  • 非常有帮助的提示。使用 `Gen.alphaNumStr.suchThat(_.length <= 50)` 生成不大于特定长度的字符串时遇到此问题,并使用 `Gen.choose(0, 50).map(Gen.listOfN(_, Gen.alphaNumChar)).map(_.mkString)`。 (2认同)