11

In my unit tests, I want to create an embedded (in-process/in-memory) Hazelcast instance that does not attempt to start or perform any networking operations at all.

How do I do this?

For example:

Config config = new Config();

// what goes here?

HazelcastInstance inProcessOnly = Hazelcast.newHazelcastInstance(config);
4

6 回答 6

11

FWIW 我在 Hazelcast 3.6.1 中创建了一个测试,并使用构造函数中的以下代码以编程方式禁用了网络集群。这将创建一个用于测试的独立服务器。

它不像使用模拟那样快,但比接受默认配置要快。

Config config = new Config();
config.setProperty("hazelcast.shutdownhook.enabled", "false");
NetworkConfig network = config.getNetworkConfig();
network.getJoin().getTcpIpConfig().setEnabled(false);
network.getJoin().getMulticastConfig().setEnabled(false);
HazelcastInstance instance = Hazelcast.newHazelcastInstance(config);
于 2016-05-03T10:07:25.307 回答
7

您还可以使用TestHazelcastInstanceFactory,它也被 Hazelcast 在内部用于单元测试。您需要为其添加此 Maven 依赖项:

<dependency>
  <groupId>com.hazelcast</groupId>
  <artifactId>hazelcast</artifactId>
  <version>${hazelcast.version}</version>
  <classifier>tests</classifier>
  <scope>test</scope>
</dependency>

有关如何使用它的示例,请参阅BasicCacheTest 。

于 2014-12-08T14:16:38.203 回答
2

回答我自己的问题:

这似乎是不可能的,但是我在下面提到了一个很好的单元测试解决方案。查看 Hazelcast 的源代码,似乎网络代码是在节点构建时自动执行的,并且没有多少配置操作对我有用。如果可能的话,我很乐意以其他方式展示。

无论如何,我能够完成单元测试所需的内容:

作为 EasyMock 的长期用户,我不知道如何干净地测试调用的代码,Hazelcast.newHazelcastInstance(config);因为它是一个静态方法调用。这实际上是促使我提出这个问题的原因——我只是想要一个仅在内存中的 Hazelcast 实例进行测试。我不希望在我们受限的构建机器上尝试网络操作——我不知道机器是否受到足够的限制,以至于 Hazelcast 的发现逻辑可能会导致构建失败。

然后我找到了PowerMock对 EasyMock 的扩展,允许我模拟静态方法调用。

使用 EasyMock 和 PowerMock,我能够对我们项目中所有与 Hazelcast 相关的代码进行完全单元测试,而无需实际启动 Hazelcast 环境。

于 2013-01-14T20:43:07.517 回答
2

我能够对Mockito做同样的事情。例如,使用一个主题

HazelcastInstance hazelcastInstance = Mockito.mock(HazelcastInstance.class);
Mockito.when(hazelcastInstance.getTopic("yourtopic")).thenReturn(Mockito.mock(ITopic.class));
于 2013-09-09T19:20:11.500 回答
0

您可以在没有这样的模拟的情况下在内存中创建:

HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();

您可以使用构造函数中的其他参数来模拟,这样您的代码将运行良好。

于 2016-09-06T15:22:06.040 回答
0

您可以使用 HazelcastTestInstance,如下所述: https ://jukusoft.com/2017/01/11/java-hazelcast-junit-tests/

(链接是德语,但代码是 Java)

于 2017-01-10T23:43:54.407 回答