3

我可以使用什么库/方法为 Java / Scala 中的给定类深度生成随机对象?通过深度生成,我的意思是用随机值递归地填充整个对象图,包括原始类型和复杂类型。

目标是使用随机生成的模拟对象进行测试。

为了使测试保持一致和可重复,每次运行时生成的对象集都应该相同。

4

3 回答 3

3

据我所知,有两种强大的方法可以随机生成非常大的任意类型的对象。第一种称为递归方法(由 Wilf 和 Nijenhuis 引入,由 Flajolet、van Cutsem 和 Zimmerman形式化),第二种称为玻尔兹曼采样,由 Duchon、Flajolet、Louchard 和 Schaeffer 提出。

在这两种方法中,您都给出了一个结构定义(“语法”),并返回一个符合语法的大型随机对象。

两者都非常成功地用于程序的大规模测试(类似于 Haskell 的QuickCheck)。不幸的是,虽然这些方法有一些不同的实现,但我认为没有现成的 Java 库。例如可以做什么,您可能想查看Yann Ponty 的页面,其中包含这些生物信息学方法的 Java 实现。如果您使用的是 OCaml,那么 Alexis Darrasse 和 Benjamin Canou 已经实现了一个有用的 Boltzmann 采样子集,作为代数类型(sumtypes)的完全自治库。

于 2012-08-18T12:34:30.803 回答
1

InPUT库可以帮助您在 Java 中执行此操作您在定义有效范围的所谓设计空间中指定 XML 中的结构。在代码中,您只需调用

IDesignSpace ds = new DesignSpace("designSpace.xml");
TheType o = ds.next("TheTypeId");

对象 o 现在根据您接受的 XML 中的有效值范围随机实例化。在这里您可以找到教程和示例。本教程中讨论了可重复性。

于 2012-12-28T23:13:31.780 回答
0

一些研究表明,Scala 有一个很棒的框架,叫做ScalaCheck,它的灵感来自上面Jérémie提到的 QuickCheck。虽然它是为 Scala 构建的,但它也可以在 Java 中使用(尽管没有语法糖)

于 2013-01-18T07:15:15.897 回答