【问题标题】:Why is my Scalacheck/Scalatest PropertyCheckConfig being ignored?为什么我的 Scalacheck/Scalatest PropertyCheckConfig 被忽略?
【发布时间】:2015-03-03 16:32:29
【问题描述】:

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

【问题讨论】:

    标签: scala testing scalatest scalacheck


    【解决方案1】:

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

    【讨论】:

    • 非常有用的提示。使用Gen.alphaNumStr.suchThat(_.length <= 50) 生成不大于特定长度的字符串时遇到此问题,并使用Gen.choose(0, 50).map(Gen.listOfN(_, Gen.alphaNumChar)).map(_.mkString) 解决。
    猜你喜欢
    • 1970-01-01
    • 2013-09-30
    • 2016-06-20
    • 1970-01-01
    • 2015-11-21
    • 2013-04-24
    • 2017-01-15
    • 2013-03-09
    • 2018-03-12
    相关资源
    最近更新 更多