如何在 Spring Boot with Gemfire 和多个 Spring 应用程序配置中执行集成测试?

How to perform integration testing in Spring Boot with Gemfire and multiple Spring Application Configurations?

我正在尝试 运行 一个与其他集成测试具有不同 SpringApplicationConfiguration 的集成测试。该问题仅在配置 Gemfire 时出现。

此处提供错误演示:https://github.com/kemitix/test-spring-boot-gemfire-testing

有两个测试 classes ContextsApplicationTestsContextsApplicationWithCustomTests.

第一个使用基于ContextsApplication class 的标准SpringApplicationConfiguration。其他尝试也包含 CustomConfiguration class 来覆盖 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 is 运行ning 的 Gemfire 实例导致了两个测试之间的某种溢出,导致上下文无法正确隔离。不幸的是,我不知道如何影响它。

你也可以试试CacheFactoryBean.setUseBeanFactoryLocator(false)