Генератор случайных данных класса scalacheck

Я пытаюсь создать случайные данные с помощью Scalacheck. У меня есть иерархия классов case со многими свойствами. Единственный способ, который я нашел до сих пор, чтобы заполнить классы 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
  )

Для класса case с 10-20 свойствами это довольно утомительно. Мне было интересно, есть ли способ автоматизировать его как-то...

Ответ 1

Я уверен, что кто-то придумает решение, которое абстрагируется от arity, используя shapeless. Но есть некоторые вспомогательные методы для генерации экземпляров Gen [T] из функций различной степени, которые могут быть использованы с методом apply объекта-компаньона класса case

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)

Ответ 3

Другим подходом будет DanielaSfregola/random-data-generator, библиотека для генерации случайных данных для целей тестирования с использованием ScalaCheck и scalacheck-shapeless.

Для Scala 2.11.8 или более, он может генерировать для вас последовательность инициализации для класса case со многими полями.