我可以使用什么库/方法为 Java / Scala 中的给定类深度生成随机对象?通过深度生成,我的意思是用随机值递归地填充整个对象图,包括原始类型和复杂类型。
目标是使用随机生成的模拟对象进行测试。
为了使测试保持一致和可重复,每次运行时生成的对象集都应该相同。
我可以使用什么库/方法为 Java / Scala 中的给定类深度生成随机对象?通过深度生成,我的意思是用随机值递归地填充整个对象图,包括原始类型和复杂类型。
目标是使用随机生成的模拟对象进行测试。
为了使测试保持一致和可重复,每次运行时生成的对象集都应该相同。
据我所知,有两种强大的方法可以随机生成非常大的任意类型的对象。第一种称为递归方法(由 Wilf 和 Nijenhuis 引入,由 Flajolet、van Cutsem 和 Zimmerman形式化),第二种称为玻尔兹曼采样,由 Duchon、Flajolet、Louchard 和 Schaeffer 提出。
在这两种方法中,您都给出了一个结构定义(“语法”),并返回一个符合语法的大型随机对象。
两者都非常成功地用于程序的大规模测试(类似于 Haskell 的QuickCheck)。不幸的是,虽然这些方法有一些不同的实现,但我认为没有现成的 Java 库。例如可以做什么,您可能想查看Yann Ponty 的页面,其中包含这些生物信息学方法的 Java 实现。如果您使用的是 OCaml,那么 Alexis Darrasse 和 Benjamin Canou 已经实现了一个有用的 Boltzmann 采样子集,作为代数类型(sumtypes)的完全自治库。
一些研究表明,Scala 有一个很棒的框架,叫做ScalaCheck,它的灵感来自上面Jérémie提到的 QuickCheck。虽然它是为 Scala 构建的,但它也可以在 Java 中使用(尽管没有语法糖)