大型对象的junit对象初始化

大型对象的junit对象初始化,junit,Junit,在JUnit测试中,我们必须初始化大量的对象。我们在对象中有对象在对象中有对象。例如: A类{ 列表列表; } B类{ 列表cList; } C类{ 名单; } 正如您已经知道的,我们的setUp()方法可能会变得非常笨拙。此外,由于我们到处使用这些对象,我们创建了一个util类,它将创建一个a对象及其所有成员。因此,如果我们在JUnit中需要它,我们只需调用MyUtil.createA() 有没有更好/更简单的方法?也许还有另一种技术可以让这项任务不那么乏味 谢谢所以我经常遇到这个问题,而你

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

A类{
列表列表;
}
B类{
列表cList;
}
C类{
名单;
}
正如您已经知道的,我们的
setUp()
方法可能会变得非常笨拙。此外,由于我们到处使用这些对象,我们创建了一个util类,它将创建一个
a
对象及其所有成员。因此,如果我们在JUnit中需要它,我们只需调用
MyUtil.createA()

有没有更好/更简单的方法?也许还有另一种技术可以让这项任务不那么乏味


谢谢

所以我经常遇到这个问题,而你现在的做法就是解决这个问题的方法。然而,我发现了一个很好的模式(使用
参数供应商
),允许对每个级别进行详细控制。想象一下以下测试:

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


@Theory
public void testSetup2(@DefaultAList @DefaultBList @SomeOtherCList(config="blah") A a){...}
通过使用我的模式,您可以轻松地控制实例的整个结构。基本思想是您有一个
TestSupplier
类,该类具有创建该类实例的静态方法。在
TestSupplier
中,提供可由
参数supplier
使用的注释,从而提供
理论
。然后,这些选项允许您指定如何创建复杂的多级对象

下面是一个示例测试:

下面是整个示例项目,展示了如何设置
TestSuppliers

以下是来自示例测试的示例测试:

@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) {...}