scalacheck案例类随机数据生成器

时间:2015-10-27 14:32:57

标签: scala testing scalacheck

我正在尝试使用Scalacheck生成随机数据。我有一个包含许多属性的case类的层次结构。我到目前为止找到填写案例类的唯一方法是:

case class Data(a: String,
                b: String,
                c: String)

val genLigneDecompte: Gen[Data] = for {
  ag <- Gen.alphaStr
  bg <- Gen.alphaStr
  cg <- Gen.alphaStr
} yield Data(
    a = ag,
    b = bg,
    c = cg
  )

对于具有10-20个属性的案例类,这非常繁琐。我想知道是否有办法以某种方式使其自动化......

3 个答案:

答案 0 :(得分:14)

我相信有人会想出一个使用shapeless抽象结构的解决方案。但是有一些辅助方法可以从不同的arity函数生成Gen [T]实例,可以与case类伴随对象的apply方法一起使用

case class Data(a: String, b: String, c: String)

val dataArb = Arbitrary(Gen.resultOf(Data))
// equivalent to
// val f: (String, String, String) => Data = Data.apply
// val gen: Gen[Data] = Gen.resultOf(f)
// val arb: Arbitrary[Data] = Arbitrary(gen)

答案 1 :(得分:8)

有一个没有形状的Scalacheck库https://github.com/alexarchambault/scalacheck-shapeless你可能正在寻找什么

答案 2 :(得分:3)

另一种方法是DanielaSfregola/random-data-generator,一个使用ScalaCheckscalacheck-shapeless生成用于测试目的的随机数据的库。

对于Scala 2.11.8或更高版本,它可以generate for you the initialization sequence for a case class with many field