3

Java / Scalaで特定のクラスのランダムオブジェクトを深く生成するために使用できるライブラリ/メソッドは何ですか?深い生成とは、プリミティブ型と複合型の両方について、オブジェクトグラフ全体をランダムな値で再帰的に埋めることを意味します。

目標は、ランダムに生成されたモックオブジェクトをテストに使用することです。

テストの一貫性と再現性を高めるには、生成されたオブジェクトのセットがすべての実行で同一である必要があります。

4

3 に答える 3

3

私の知る限り、非常に大きな任意のタイプのオブジェクトをランダムに生成するための2つの強力な方法があります。1つは再帰的方法(WilfとNijenhuisによって導入され、Flajolet、van Cutsem、Zimmermanによって形式化された)と呼ばれ、2つ目はDuchon、Flajolet、Louchard、Schaefferによるボルツマンサンプリングと呼ばます

どちらの方法でも、構造定義(「文法」)を指定すると、文法に従った大きなランダムオブジェクトが返されます。

どちらも、プログラムの大規模なテストで非常にうまく使用されています(HaskellのQuickCheckと同様)。残念ながら、メソッドにはさまざまな実装がありますが、Java用のすぐに使用できるライブラリはないと思います。たとえば、何ができるかについては、バイオインフォマティクス用のこれらのメソッドのJava実装を使用してYannPontyのページを確認することをお勧めします。OCamlを使用している場合、AlexisDarrasseとBenjaminCanouは、代数的タイプ(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

いくつかの調査によると、 ScalaCheckと呼ばれるScalaの優れたフレームワークがあります。これは、 Jérémieが前述したQuickCheckに触発されたものです。Scala用にビルドされていますが、Javaでも使用できます(ただし、構文糖衣はありません)

于 2013-01-18T07:15:15.897 に答える