junit对象初始化大对象

时间:2013-08-14 06:17:31

标签: junit

在我们的JUnit测试中,我们必须初始化大量的对象。我们在对象内的对象中有对象。例如:

class A {
    List<B> bList;
}

class B {
    List<C> cList;
}

class C {
    List<D> dList;
}

正如您已经知道的那样,我们的setUp()方法可能变得非常笨拙。另外,由于我们在所有地方使用这些对象,因此我们创建了一个util类,它将创建一个A对象及其所有成员。所以如果我们在JUnit中需要它,我们只需要调用MyUtil.createA()

有更好/更简单的方法吗?或许甚至是另一项让这项任务变得不那么繁琐的技术呢?

感谢

1 个答案:

答案 0 :(得分: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。然后,这些允许您指定如何创建复杂的多级对象。

以下是一个示例测试:ExampleTest.java

以下是整个示例项目,展示如何设置TestSuppliersTestExamples

以下是来自 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) {...}