scalacheck案例类随机数据生成器

KaC*_*KaC 14 testing scala 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
  )
Run Code Online (Sandbox Code Playgroud)

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

Rüd*_*ehn 15

我相信有人会提出一个解决方案,使用无形的抽象结构.但是有一些辅助方法可以从不同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)
Run Code Online (Sandbox Code Playgroud)


Vik*_*dya 10

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