ScalaCheck中Prop.delay的正确用法是什么?

时间:2017-01-27 01:32:06

标签: scala quickcheck scalacheck property-based-testing

延迟生成器对递归数据结构有意义。我想知道这个Prop.delay可能有用的情况。你能否展示一个现实生活中的例子。

1 个答案:

答案 0 :(得分:2)

  

我想知道这个Prop.delay在哪种情况下会有所帮助。   你能否展示一个现实生活中的例子。

假设您在Scalacheck中编写了基于属性的测试套件的扩展,并希望用户构建其属性,并且您的扩展需要属性,但不应立即执行它们。

实际上,Scalacheck在内部使用Prop.delay构造属性,允许用户使用Properties trait / superclass定义测试。

class BadExample extends Properties("Bad example") {
  property("divide by 0") = {
    Prop.forAllNoShrink { x: Int =>
      x / 0 == 0 // No!
    }
  }
}

这会收集属性,以便它们可以由测试运行器(作为应用程序或通过sbt)执行

sealed class PropertySpecifier() {
  def update(propName: String, p: => Prop) = {
    props += ((name+"."+propName, Prop.delay(p)))
  }
}

private val props = new scala.collection.mutable.ListBuffer[(String,Prop)]

lazy val property = new PropertySpecifier()