scalacheck case class 随机数据生成器

scalacheck case class random data generator

我正在尝试使用 Scalacheck 生成随机数据。我有一个具有许多属性的 case classes 层次结构。到目前为止,我发现填充案例 classes 的唯一方法是这样的:

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 个属性的案例 class,这非常乏味。我想知道是否有办法以某种方式使其自动化...

我相信有人会想出一个使用 shapeless 抽象元数的解决方案。但是有一些辅助方法可以从不同数量的函数生成 Gen[T] 实例,可以与 case class companion object

的 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)

有一个基于 shapeless 的 Scalacheck 库https://github.com/alexarchambault/scalacheck-shapeless您可能正在寻找的东西

另一种方法是 DanielaSfregola/random-data-generator, A library to generate random data for test purposes, using ScalaCheck and scalacheck-shapeless

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