использование контекста весеннего теста для инициализации данных

Мне было интересно, можно ли инициализировать тестовые данные, реализовав интерфейс TestExecutionListener и используя beforeTestClass и afterTestClass для загрузки/удаления данных. Тестовые данные будут доступны в плоском файле, и я хотел бы, чтобы местоположение файла данных было частью аннотации тестового класса.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring/test-dao.xml"})
@TestExecutionListeners(
{ 
  DependencyInjectionTestExecutionListener.class,
  InsertTestDataExecutionListener.class
})
@DataSetLocation("classpath:data/test-dao-dataset.xml")
public abstract class AbstractDaoTests {
   public List testdata....
}

В приведенном выше псевдокоде InsertTestDataExecutionListener реализует интерфейс TestExecutionListener и в методе beforeClass получает расположение набора данных из аннотации. Я пытаюсь выяснить, как я могу настроить содержимое свойства «testdata», используя TestContext.

public class InsertTestDataExecutionListener implements TestExecutionListener {
   public void beforeTestClass(TestContext aContext) {
       DataSetLocation dsLocation = aContext.getTestClass().getAnnotation(
            DataSetLocation.class
            );
       //Load the contents of the file using the dataset location.

       ?? How to set the property of 'testdata' from the Abstract class
   }
}

Должен ли я использовать отражение для выполнения работы?


person user320587    schedule 18.03.2013    source источник


Ответы (1)


Насколько я понимаю, не требуется доступ к контексту Spring во время загрузки данных (это просто файл в пути к классам). Итак, вы можете выполнять работу без слушателей:

public abstract class AbstractDaoTests {
   public List testdata;
   public List getTestData() {...}
   public abstract String getDataLocation();

   public AbstractDaoTests () {
       testData = loadDataFromLocation(getTestData());
   }
}


public class ConcreteTest extend AbstractDaoTests  {
    @Override
    public String getDataLocation() {return "classpath:data/test-dao-dataset.xml";}
}

Конечно, вы можете использовать аннотацию вместо абстрактного метода и получить ее из this.getClass().getAnnotation в конструкторе.

person Michail Nikolaev    schedule 18.03.2013