使用嵌入式gemfire定位器和服务器进行集成测试

时间:2019-01-15 07:30:49

标签: java gemfire spring-data-gemfire

我有一个使用gemfire定位器和服务器的应用程序。我想编写一个集成测试,可以帮助我在JVM中启动定位器和服务器,并在结束测试时将其关闭。我找不到任何文档可以帮助我做到这一点。

当测试开始使用LocatorLauncherServerLauncher时,我曾尝试启动定位器和服务器。它启动定位器,但引发异常,说明IllegalStateException: A connection to a distributed system already exists in this VM.

我对gemfire不太满意,不明白我在这里想念的是什么,还是我在尝试完全错误的方向。

1 个答案:

答案 0 :(得分:0)

了解更多有关您要精确测试的内容将很有用。我们在Geode代码库中进行了不同级别的测试。如果您只需要一台服务器,我建议您在JUnits中使用ServerStarterRule。这是一个示例:https://github.com/apache/geode/blob/f12055ae3ae4b1f4731c0447af0c4cb9abdd4159/geode-core/src/integrationTest/java/org/apache/geode/management/internal/cli/commands/AlterRegionCommandIntegrationTest.java

此规则将作为JUnit JVM的一部分启动服务器。这意味着您将无法同时使用ClientCache(在同一JVM实例中不能同时拥有ClientCacheCache实例)。

下一级别的测试称为DUnit测试。该框架允许您启动多个JVM并形成一个实际的集群。最好的使用方法是将ClusterStartupRuleGfshCommandRule一起使用。例如:https://github.com/apache/geode/blob/10d89ede6f90f046c15e12e3d16aed259d7044b0/geode-cq/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/ListClientCommandDUnitTest.java

在这里,各种组件正在启动,包括客户端VM。使用这些规则的好处是,它们将以一致且安全的方式为您处理启动和拆卸。