6

多くの異なるフィールドを持つクラスがあるとします。このクラスは DTO であり、テスト目的のため、実際の値は気にしません。存在するだけです。すべてのフィールドをトラバースしてプリミティブを設定できるツールはありますか? Number の場合は 0 (Float、Double の場合は 0.0、Integer の場合は 0.0、Long の場合は 0L ですが、デフォルトでは null ではありません)、String の場合は「test」のようなものですか?

また、そのツールでコレクション (リスト、セット、マップ) にデータを入力したいと考えています。

4

5 に答える 5

7

ちょっとしたグーグルでこの結果が得られます:

それ以外の場合は、リフレクションを使用してデータを入力できます。

  • デフォルト値を持つプリミティブ/ラッパー
  • rendom 値を持つ文字列
  • Collection<T>(set,list)ランダムなサイズでコードを再利用して入力する<T>

等々。

それ以外の場合、XML バインディング (jaxb またはその他のテクノロジを使用) はオプションですが、事前にデータを含む xml を準備する必要があります。
フレームワークを除いて、他のすべてのソリューションには 2 つの大きな問題があります。作成する必要があることと、多くのテストが必要です。

于 2013-08-15T10:18:14.800 に答える
0

すべてのフィールドを横断してプリミティブを設定できるツールはありますか? また、そのツールでコレクション (リスト、セット、マップ) を作成したいと考えています。

私の知る限り、単純な方法で行うよりも多くの労力を節約できるものはありません. フィールドをイニシャライザで宣言したり、コンストラクタで簡単なデフォルトの初期化を行ったりするのは簡単なことです。

ラッパー型ではなくプリミティブ型を使用することをお勧めします。例えばintむしろInteger。利点の 1 つは、プリミティブ型のフィールドがデフォルトで00.0またはfalse... に初期化されることです。

于 2013-08-15T10:13:57.390 に答える
0

リフレクションによってフィールドのタイプを取得し、リフレクションを使用して必要なものに初期化できます。

public static void main(String[] args) {
        MyDTO myDTO = new MyDTO();
        Field [] fields = myDTO.getClass().getDeclaredFields();
        for (Field field: fields){
            if (field.getType().equals(Integer.TYPE)){
                //Primitives are already initialized to 0, so no need to do anything.
            }else if (field.getType().equals(String.class)){
                System.out.println("String");
                //Invoke setter method with reflection, initialize to ""
            }
        }
    }
于 2013-08-15T10:25:16.480 に答える
0

小さなループで Introspector.getBeanInfo(object.getClass()).getPropertyDescriptors() を使用してメソッドを記述し、必要に応じてフィールドに入力します。このメソッドを再帰的に呼び出して、クラス、コレクションなどを埋めることができます。

もう 1 つの方法は、JAXB、XStream、または Abraxas を使用した XML デシリアライゼーションです。

于 2013-08-15T10:15:03.820 に答える