我正在尝试运行一个与其他集成测试具有不同SpringApplicationConfiguration
的集成测试。该问题仅在配置Gemfire时出现。
错误示例如下:https://github.com/kemitix/test-spring-boot-gemfire-testing
有两个测试类ContextsApplicationTests
和ContextsApplicationWithCustomTests
。
第一个使用基于ContextsApplication
类的标准SpringApplicationConfiguration
。另一个尝试还包括CustomConfiguration
类来覆盖Bean。
@IntegrationTest
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ContextsApplication.class)
public class ContextsApplicationTests {
...
测试二:@IntegrationTest
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {
ContextsApplication.class,
CustomConfiguration.class
})
public class ContextsApplicationWithCustomTests {
如果没有启用Gemfire,测试就可以正常运行。
但是,配置Gemfire会导致上下文加载器抛出IllegalArgumentException
:
Caused by: java.lang.IllegalArgumentException:
a beanFactoryReference already exists for key cacheFactoryBean
完整的输出包含在repo中的mvn-clean-install.txt
文件中。
当两个测试单独运行时,它们可以工作。只有当它们一起运行时,问题才会出现。我怀疑Spring Boot正在运行的Gemfire实例在两个测试之间造成了某种溢出,导致上下文不能正确隔离。不幸的是,我不知道如何影响这一点。
您也可以尝试CacheFactoryBean.setUseBeanFactoryLocator(false)