2013-08-14 2 views
2

В наших тестах JUnit мы должны инициализировать объекты, которые являются массивными. У нас есть объекты внутри объектов внутри объектов. Например:Инициализация объекта юнита для больших объектов

class A { 
    List<B> bList; 
} 

class B { 
    List<C> cList; 
} 

class C { 
    List<D> dList; 
} 

Как вы уже можете сказать, наши setUp() методы могут стать довольно громоздким. Кроме того, поскольку мы используем эти объекты повсюду, мы создали класс util, который создаст объект A вместе со всеми его членами. поэтому, если нам это нужно в JUnit, мы просто позвоним MyUtil.createA().

Есть ли лучший/более простой способ сделать это? Возможно, еще одна технология, которая делает эту задачу намного менее утомительной?

благодаря

ответ

0

Так я столкнулся с этим много и как вы собираетесь об этом есть решение. Тем не менее, я нашел хороший patter (используя 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

Вот весь пример проекта, показывающий, как настроить 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) {...} 
Смежные вопросы