2

JUnit テストでは、大規模なオブジェクトを初期化する必要があります。オブジェクト内のオブジェクト内にオブジェクトがあります。例えば:

class A {
    List<B> bList;
}

class B {
    List<C> cList;
}

class C {
    List<D> dList;
}

すでにおわかりのように、私たちのsetUp()方法は非常に扱いにくくなる可能性があります。Aさらに、これらのオブジェクトをいたるところで使用するため、オブジェクトとそのすべてのメンバーを作成する util クラスを作成しました。したがって、JUnit で必要な場合は、 を呼び出すだけMyUtil.createA()です。

これを行うためのより良い/より簡単な方法はありますか? おそらく、この作業をより簡単にする別のテクノロジーでしょうか?

ありがとう

4

1 に答える 1

0

だから私はこれに何度も遭遇しました、そしてあなたがそれについて行っている方法は解決策です. しかし、ParameterSupplier各レベルを詳細に制御できる素敵なパターン ( を使用) を見つけました。次のテストを想像してください。

@Theory
public void testSetup1(@DefaultAList @DefaultBList @DefaultCList A a){...}


@Theory
public void testSetup2(@DefaultAList @DefaultBList @SomeOtherCList(config="blah") A a){...}

私が持っているパターンを使用することで、インスタンスの構造全体を簡単に制御できます。基本的な考え方は、TestSupplierクラスのインスタンスを作成するための静的メソッドを持つクラスがあるということです。でTestSupplier使用できる注釈を提供するParameterSupplierため、Theories. これらを使用すると、複雑なマルチレベル オブジェクトの作成方法を指定できます。

テストの例を次に示します

のセットアップ方法を示すサンプル プロジェクト全体を次に示しTestSuppliersます

ExampleTestのテスト例を次に示します。

@Theory
public void test1(
        @DefaultTopBean @SingleMiddleBean @SingleValidBottomBean 
            TopBean topBean) {...}

@Theory
public void test2(
        @DefaultTopBean @SingleMiddleBean @InvalidBottomBean 
            TopBean topBean) {...}

@Theory
public void test3(
         @DefaultTopBean 
         @MiddleBeansWithState(states = { State.State1, State.State3 }) 
         @MultipleValidBottomBean(count = 2) 
               TopBean topBean) {...}
于 2013-08-14T11:15:00.870 に答える