2

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

class A {
    List<B> bList;
}

class B {
    List<C> cList;
}

class C {
    List<D> dList;
}

正如您已经知道的那样,我们的setUp()方法可能会变得非常笨拙。此外,由于我们到处使用这些对象,我们创建了一个 util 类,它将创建一个A对象及其所有成员。因此,如果我们在 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中提供可以被ParameterSupplierand 因此使用的注释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) {...}
于 2013-08-14T11:15:00.870 回答