【问题标题】:junit object initialization for large objects大对象的junit对象初始化
【发布时间】:2013-08-14 23:59:20
【问题描述】:

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

class A {
    List<B> bList;
}

class B {
    List<C> cList;
}

class C {
    List<D> dList;
}

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

有没有更好/更简单的方法来做到这一点?或许还有另一种技术可以让这项任务变得不那么乏味?

谢谢

【问题讨论】:

    标签: junit


    【解决方案1】:

    所以我遇到了很多这样的问题,而您的解决方法就是解决方案。然而,我发现了一个很好的模式(使用ParameterSupplier),它允许对每个级别进行详细控制。想象一下以下测试:

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

    通过使用我的模式,您可以轻松控制实例的整个结构。基本思想是您有一个TestSupplier 类,该类具有用于创建该类实例的静态方法。在TestSupplier 中提供ParameterSupplierTheories 可以使用的注释。然后,这些允许您指定如何创建复杂的多级对象。

    这是一个示例测试:ExampleTest.java

    这是展示如何设置TestSuppliers的整个示例项目:TestExamples

    这是来自 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-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-27
      相关资源
      最近更新 更多