我有几个测试都扩展了定义 Spring 测试应用程序上下文的相同根测试。我的一个测试使用了不同的配置文件,所以我用 注释了子类@ActiveProfiles("specialTestProfile")
,这个配置文件创建了一个特殊的模拟 bean,它被注入到上下文中。我想在执行此测试之前和之后清除我的上下文,但我没有找到正确的方法。我知道 Spring 测试框架做了一些上下文缓存,在我的情况下,我应该有两个不同的上下文,应该没有必要重新加载上下文,但它不起作用,因为如果我不这样做,bitronix 会产生这个奇怪的错误清理上下文:
Caused by: bitronix.tm.resource.ResourceConfigurationException: cannot create JDBC datasource named unittestdb
at bitronix.tm.resource.jdbc.PoolingDataSource.init(PoolingDataSource.java:57)
at sun.reflect.GeneratedMethodAccessor404.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1608)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1549)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479)
... 62 more
Caused by: java.lang.IllegalArgumentException: resource with uniqueName 'unittestdb' has already been registered
at bitronix.tm.resource.ResourceRegistrar.register(ResourceRegistrar.java:55)
at bitronix.tm.resource.jdbc.PoolingDataSource.buildXAPool(PoolingDataSource.java:68)
at bitronix.tm.resource.jdbc.PoolingDataSource.init(PoolingDataSource.java:53)
... 68 more
即使我为每个测试类重新加载上下文(通过用 注释我的父类@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
,我仍然会在某些时候收到上述错误......你知道如何解决这个问题吗?