高阶 Scalacheck 属性

High-order Scalacheck property

我是 Scala、Scalacheck 和 specs2 的新手,如果问题很明显,请耐心等待。我试图查看这方面的示例,但找不到任何相关内容。

基本上我正在寻找一种方法来创建测试 class 使用 specs2 定义一个 Prop.forAll 属性 接收另一个 scalacheck 属性 作为参数(donno如果可能的话),一个生成器(Gen[A])和一个文件路径,并检查 属性 是否通过一组确定的样本(来自生成器)并将错误保存在文件中。

有什么办法可以实现吗?泛泛而谈

我提议:

import org.specs2._
import org.specs2.execute._
import org.scalacheck._

class TestSpec extends Specification with ScalaCheck { def is = s2"""

  Test my RDD $test

  """

  def test = {
    // get / create a generator
    val gen: Gen[Row] = ???
    // run the property
    property(gen, "prop1.txt") { r: Row =>
      r.values must haveSize(3)
    }
  }

  def property[A, R : AsResult](g: Gen[A], path: String)(prop: A => R): Result =
    saveResult(path)(Prop.forAll(g)(prop))

  def saveResult[R : AsResult](path: String)(r: R): Result = {
    val result = AsResult(r)
    if (!result.isSuccess) writeToFile(result, path)
    result
  }

  def writeToFile(result: Result, path: String) = ???

  case class Row(values: List[Int])
}