我有一个连接到一些jms消息代理的spring web应用程序,现在从Spring 3.2.16迁移到Spring 4.2.4.RELEASE后发现测试错误和失败。Spring 4现在升级junit测试失败“GenericApplicationContext尚未刷新”?
下面的错误是我现在正在使用JmsTemplate在单元测试中更改弹簧版本后得到的。
[email protected]eec522 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());
在我看来,这些试验尝试使用豆类它与bean定义建设者注册之前它完成注册所有的bean,尝试加载到genericApplicationContext中。
这必须被允许在春季3,但不是4
我如何重构这个代码仍然使用GenericApplicationContext,或者采取不同的方法?
________编辑:____________
该应用程序还具有在XML定义了很多豆子,我仍然需要通过从应用程序的整个运行时间。像错误一样调用context.refresh()表明修复了“未被刷新”的错误,但是当应用程序随后尝试使用XML中定义的其中一个bean时,它会抛出一个错误消息,因为它已被擦除来自.refresh调用的上下文。
是的,但是它是真的,context.refresh()总是会清理整个应用程序上下文?我不能只调用.refresh()的原因是因为应用程序还加载了一堆用XML定义的bean。因此,当我使用.refresh时,它加载了在上下文上动态注册的bean,但它也删除了之前加载的每个我以前需要的XML。有什么办法可以解决这个问题吗? –
另外应该提一下,我试过@DirtiesContext注解。不解决问题,因为测试不是使用通用上下文来注册新的bean,而是测试调用的方法。 –