为什么不评估Scalacheck Prop值?

时间:2016-07-09 16:46:57

标签: scalacheck

官方scalacheck文档提供了以下示例:

  property("stringLength") = Prop.forAll { s: String =>
    val len = s.length
    (s+s).length == len+len
  }

我读到这也可以写成:

  val stringLength = Prop.forAll { s: String =>
    val len = s.length
    (s+s).length == len+len
  }

如何运行第二种形式的测试代码?当我执行sbt test时,第二个版本没有任何反应。

1 个答案:

答案 0 :(得分:0)

问题是第二个版本只是声明一个val,它包含对相关属性的引用,但这还不足以让scalacheck对其进行评估。这种声明属性的方式很有用,例如,如果要从其他基本属性中组合新属性。您可以直接检查它或为其分配特殊属性设置器,以便在测试运行中对其进行评估:

val stringLength = Prop.forAll { s: String =>
  val len = s.length
  (s+s).length == len+len
}

// invoke directly:
stringLength.check

// alternatively, just declare it the usual way
property("stringLength") = stringLength

这本身并不是很有用,它的使用方式可能是这样的:

property("composite") = Prop.all(stringLength, prop2, prop3, ...)