我可以使用什么库/方法为 Java/Scala 中的给定类深度生成随机对象? 我所说的深度生成是指用随机值递归地填充整个对象图,包括原始类型和复杂类型。
目标是使用随机生成的模拟对象进行测试。
为了使测试一致且可重现,生成的对象集在每次运行时都应该相同。
最佳答案
据我所知,有两种强大的方法可以随机生成非常大的任意类型的对象。第一种称为递归方法(由 Wilf 和 Nijenhuis 引入,formalized 由 Flajolet、van Cutsem 和 Zimmerman 引入),第二种称为 Boltzmann sampling 作者:Duchon、Flajolet、Louchard 和 Schaeffer。
在这两种方法中,您都给出一个结构定义(“语法”),然后返回一个符合语法的大型随机对象。
两者都非常成功地用于程序的大规模测试(类似于 Haskell 的 QuickCheck )。不幸的是,虽然有一些不同的方法实现,但我认为没有现成的 Java 库。例如可以做什么,你可能想检查 Yann Ponty's page这些生物信息学方法的 Java 实现。如果您使用的是 OCaml,那么 Alexis Darrasse 和 Benjamin Canou 已经实现了 a useful subset of Boltzmann sampling作为一个完全自主的代数类型(sumtypes)库。
关于java - 在Java中递归生成随机对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12017545/