我正在嘗試運行與其他集成測試有不同SpringApplicationConfiguration
的集成測試。該問題僅在Gemfire配置時纔會顯示。如何使用Gemfire和多個Spring應用程序配置在Spring Boot中執行集成測試?
在這裏提供了錯誤的示範: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
完整輸出被包括在回購文件mvn-clean-install.txt
英寸
當兩個測試孤立運行時,它們工作。只有當他們一起運行時,問題纔會出現。我懷疑Spring Boot正在運行的Gemfire實例正在導致兩種測試之間的某種流血事件,導致上下文無法正確分離。不幸的是,我不知道如何影響這個。
我發現我可以通過添加'@ DirtiesContext'到'ContextsApplicationWithCustomTests'類workround這一點。但是,在我的用例中,配置適用於除一個測試以外的所有測試。例外是不使用「CustomConfiguration」的測試。在ContextsApplicationTests上使用'@ DirtiesContext'不能解決問題。 –