2012-03-16 4 views
2

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

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

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

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

ответ

2

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

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

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

+0

Спасибо, я использую весна-тест тоже, и через какое-то нюхает только что нашел «@DirtiesContext (classMode = ClassMode.AFTER_EACH_TEST_METHOD)», это делает работу, он перезагружает весь контекст, медленный, но только для тестов интеграции. – isah

0

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

... 
    @Autowired 
    HomeA homeA; 

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

    // here homeA is available 
    } 
    ...