我有一个Spring Boot应用程序,配置了Pivotal GemFire ClientCache
实例及其相应的域对象。我也使用Spring Boot Test进行单元测试。对于每个测试用例执行,无论是通过类还是Maven构建,如果GemFire缓存关闭,Spring ApplicationContext
将无法加载。
如何在不依赖GemFire缓存的情况下启动Spring Boot应用程序?
我不确定我完全遵循你的意思......
“对于每个测试用例执行,无论是通过类还是Maven构建,如果GemFire缓存关闭,Spring
ApplicationContext
都无法加载。”
您是否在测试类中为每个测试用例(方法)重新创建了ClientCache
实例?
如果是这样,那么这可能是棘手的,因为即使在调用ClientCache.close()
之后,GemFire也可能没有完全“关闭”并释放ClientCache
实例使用的所有资源。但是,通常这不会阻止Spring ApplicationContext
在后续测试用例执行时重新创建。它通常只是导致后续的测试失败,因为ClientCache
实例是脏的或陈旧的,保留了之前(或最后一次)测试用例执行的旧状态。
您是否也在测试用例方法中使用Spring的@DirtiesContext
?
通常,每个测试类循环ApplicationContext
和GemFire缓存实例(例如ClientCache
)是明智的,其中测试类中的每个测试用例方法将使用相同的ApplicationContext
和ClientCache
实例;这是最理想的。
有了这个,我有两件事要跟你分享:
ClientCache
实例。ClientCache
实例并测试Pivotal GemFire的各个方面,例如CQ或安全性等。ClientCache
实例(例如,这个test class,特别是这个test configuration)。然而,在许多其他情况下,我使用了一个实时的GemFire ClientCache
实例,用于example或这个test class,这很有趣,因为这个测试类甚至launches a server为ClientCache
实例(测试本身)连接。ForkingClientServerIntegrationTestsSupport
,等等。总之,使用新的Spring Boot for Pivotal GemFire和Spring Test for Pivotal GemFire项目作为编写更有效的单元和集成测试的指南。
最后,如果您有一个示例GitHub存储库来重现您的问题,我可以帮助您指出正确的方向。
希望这可以帮助!
问候,约翰
对于您的单元测试,请使用其他配置文件。说application-ut.yaml并要求spring不要使用任何缓存实现库:
application-ut.yaml(在下面添加条目并删除为Gemfire配置的任何实现)
spring.cache.type : simple