Scalacheck
предлагает генератор констант, который позволяет определять настраиваемые / постоянные строки:
import org.scalacheck._
val fooGen: Gen[Foo] =
for {
baz <- Gen.const("custom for testing").map(Baz)
price <- Gen.choose[Double](0, 5000)
name <- Gen.alphaStr
value <- Gen.choose(0, 100)
} yield {
val bar = Bar(baz, price)
Foo(bar, name, value)
}
Вот что мы получаем, когда запускаем его:
scala> fooGen.sample
res6: Option[Foo] = Some(
Foo(
Bar(Baz("custom for testing"), 1854.3159675078969),
"EegNcrrQyzuazqrkturrvsqylaauxausrkwtefowpbkptiuoHtdfJjoUImgddhsnjuzpoiVpjAtjzulkMonIrzmfxonBmtZS",
64
)
)
Обновление : Как указывал @Dima, способ получения случайных значений для всех полей состоит в том, чтобы использовать [scalacheck-shapeless]
(https://github.com/alexarchambault/scalacheck-shapeless) и lenses
для настройки, вот пример, который используетMonocle
:
import org.scalacheck.{Arbitrary, Gen}
import monocle.Lens
import org.scalacheck.ScalacheckShapeless._
implicitly[Arbitrary[Foo]]
val lensBar = Lens[Foo, Bar](_.bar)(bar => _.copy(bar = bar))
val lensBaz = Lens[Bar, Baz](_.baz)(baz => _.copy(baz = baz))
val lensThing = Lens[Baz, String](_.thing)(thing => _.copy(thing = thing))
val lens = (lensBar composeLens lensBaz composeLens lensThing).set("custom for testing")
val fooGen: Gen[Foo] = Arbitrary.arbitrary[Foo].map(lens)
println(fooGen.sample)
// Display
// Some(Foo(Bar(Baz(custom for testing),1.2227226413326224E-91),〗❌䟤䉲㙯癏<,-2147483648))