Возможно ли обновить Spring ApplicationContext без повторной инициализации контекста? - PullRequest
2 голосов
/ 16 марта 2012

Я делаю некоторые интеграционные тесты с JUnit. У меня есть XML-файл, в котором я объявляю некоторые сущности шаблона, которые я хочу внедрить. В каждом тесте мне нужен свежий контекст приложения, то есть ни один тест не должен зависеть / связываться с другими тестами, поэтому setUp() Мне нужно «повторно инициализировать» эти сущности с их начальными значениями по умолчанию.

Я могу добиться этого путем перезагрузки, но таким образом я не могу использовать @Autowired аннотации.

@Before
public void setUp(){        
    ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:entityTemplates-Context.xml");
    homeA = (Home)ctx.getBean("homeA");
}

Есть ли способ сделать это и по-прежнему использовать @Autowired для этих объектов?

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Вы смотрели на поддержку Spring для интеграционного тестирования?

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/testing.html

Моя команда использует это для наших интеграционных тестов, где нам нужен контейнер Spring. Вы получаете свежий контекст для каждого теста, хотя это значительно замедляет тесты.

0 голосов
/ 18 июля 2013

Вы также можете сделать это вручную следующим образом:

  ...
  @Autowired
  HomeA homeA;

  @Before
  public void setUp() {
    // configures this test instance as a regular spring bean
    ctx.getAutowireCapableBeanFactory().autowireBean(this);

    // here homeA is available
  }
  ...
...