2015-10-20 92 views
0

我正在嘗試運行與其他集成測試有不同SpringApplicationConfiguration的集成測試。該問題僅在Gemfire配置時纔會顯示。如何使用Gemfire和多個Spring應用程序配置在Spring Boot中執行集成測試?

在這裏提供了錯誤的示範:https://github.com/kemitix/test-spring-boot-gemfire-testing

有兩種測試類ContextsApplicationTestsContextsApplicationWithCustomTests

第一次使用基於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 

完整輸出被包括在回購文件mvn-clean-install.txt英寸

當兩個測試孤立運行時,它們工作。只有當他們一起運行時,問題纔會出現。我懷疑Spring Boot正在運行的Gemfire實例正在導致兩種測試之間的某種流血事件,導致上下文無法正確分離。不幸的是,我不知道如何影響這個。

+0

我發現我可以通過添加'@ DirtiesContext'到'ContextsApplicationWithCustomTests'類workround這一點。但是,在我的用例中,配置適用於除一個測試以外的所有測試。例外是不使用「CustomConfiguration」的測試。在ContextsApplicationTests上使用'@ DirtiesContext'不能解決問題。 –

回答

1

您也可以嘗試CacheFactoryBean.setUseBeanFactoryLocator(假)

+0

謝謝。這解決了它。 '@Bean CacheFactoryBean cacheFactoryBean(){ final CacheFactoryBean cacheFactoryBean = new CacheFactoryBean(); cacheFactoryBean.setUseBeanFactoryLocator(false); return cacheFactoryBean; }' –

相關問題