У меня есть веб-приложение весны, которое подключается к некоторым брокерским сообщениям сообщений jms, и теперь я нахожу ошибки теста и сбои после перехода с Spring 3.2.16 на Spring 4.2.4.RELEASE.Обновление 4-го обновления сейчас тесты junit терпят неудачу на «GenericApplicationContext еще не обновлен»?
Ниже приведена ошибка, которую я получаю после простого изменения весенней версии на модульных тестах, которые используют JmsTemplate.
org.springframework[email protected] has not been refreshed yet
тест классы настроены так:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:beans.xml"})
public class JMSMiscUtilTest {
В конце концов, есть несколько модульных тестов в этом классе и пара других подобных классов, тестовый код, который пытается зарегистрировать фасоль с GenericApplicationContext.
Эти методы выполняют вызовы GenericApplicationContext (JmsTemplate) genericContext.getBean (location);
, а затем впоследствии попытаться зарегистрировать фасоль так:
final BeanDefinitionBuilder bDBuilder = BeanDefinitionBuilder
.rootBeanDefinition("org.springframework.jms.core.JmsTemplate");
genericContext.registerBeanDefinition(location,
bDBuilder.getBeanDefinition());
Мне кажется, что эти тесты пытаются использовать бобы зарегистрированный с застройщиком определения боба, прежде чем он закончил регистрацию всех бобов он пытается загрузите в genericApplicationContext.
Это должно быть разрешено весной 3, но не 4.
Как реорганизовать этот код, чтобы оставаться с помощью GenericApplicationContext, или принять другой подход?
________ Edit: ____________
Приложение также имеет много бобов, определенных в XML, который я все еще нужно через вне все время выполнения приложения. Вызов context.refresh(), как и ошибка, указывает на то, что исправлена ошибка «не обновилась», но затем, когда приложение впоследствии пытается использовать один из компонентов, определенных в XML, он выдает ошибку, которой она не существует, поскольку она была протерта из контекста из вызова .refresh.
Да, но верно ли, что context.refresh() ВСЕГДА будет очищать весь контекст приложения? Причина, по которой я не могу просто вызвать .refresh(), заключается в том, что приложение также загружает кучу фасоли, определенные в XML. Поэтому, когда я использовал .refresh, он загружал компоненты, которые были динамически зарегистрированы в контексте, но также удалил каждый компонент, который ранее был загружен XML, что мне нужно. Есть ли способ обойти это? –
Также следует упомянуть, я пробовал аннотацию @DirtiesContext. Не исправляет проблему, потому что тесты не используют общий контекст для регистрации новых bean-компонентов, это метод, вызванный тестами. –