最简单的方法是使用Scala检查 https://www.scalacheck.org/。您可以通过定义一个Gen[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-无形状 https://github.com/alexarchambault/scalacheck-shapeless这会产生Gen[A]
对于你来说,具有完全随机的值(你无法控制它们)。
您可能还想了解一下随机数据生成器 https://github.com/DanielaSfregola/random-data-generator(感谢@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)
}
这也特别有帮助基于属性的测试 http://www.scalatest.org/user_guide/property_based_testing.