Генератор случайных данных класса 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)
Ответ 2
Существует бесформенная библиотека Scalacheck https://github.com/alexarchambault/scalacheck-shapeless, что вы можете искать
Ответ 3
Другим подходом будет DanielaSfregola/random-data-generator
, библиотека для генерации случайных данных для целей тестирования с использованием ScalaCheck и scalacheck-shapeless.
Для Scala 2.11.8 или более, он может генерировать для вас последовательность инициализации для класса case со многими полями.