最简单的方法是使用ScalaCheck。Gen[A]
您可以通过为您的实例定义 a 来做到这一点:
import org.scalacheck.Gen
final case class C(c1: Int, c2: Double, c3: Option[String])
object C {
val cGen: Gen[C] = for {
c1 <- Gen.posNum[Int]
c2 <- Gen.posNum[Double]
c3 <- Gen.option(Gen.oneOf("foo", "bar", "hello"))
} yield C(c1, c2, c3)
}
你消费它:
object F {
def main(args: Array[String]): Unit = {
val randomC: C = C.cGen.sample.get
}
}
最重要的是,您可以添加为您生成的scalacheck-shapelessGen[A]
,具有完全随机的值(您无法控制它们)。
您可能还想研究随机数据生成器(感谢@Gabriele Petronella),它可以进一步简化事情。从文档:
import com.danielasfregola.randomdatagenerator.RandomDataGenerator
object MyApp extends RandomDataGenerator {
case class Example(text: String, n: Int)
val example: Example = random[Example]
// Example(ਈ䈦㈾钜㔪旅ꪔ墛炝푰⡨䌆ᵅ퍧咪, 73967257)
}
这在基于属性的测试中也特别有用。