如何创建嵌入进程/内存,无需联网Hazelcast实例?(How do you create a H

2019-08-06 12:56发布

在我的单元测试,我想创建一个嵌入式(进程/内存)Hazelcast不尝试启动或执行任何网络操作实例。

我该怎么做呢?

例如:

Config config = new Config();

// what goes here?

HazelcastInstance inProcessOnly = Hazelcast.newHazelcastInstance(config);

Answer 1:

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);


Answer 2:

您还可以使用TestHazelcastInstanceFactory这也被Hazelcast内部的单元测试。 您将需要添加此Maven的依赖吧:

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

见BasicCacheTest对于如何使用的例子。



Answer 3:

回答我的问题:

看来,这是不可能的,但对于单元测试目的,我下面提一个很好的解决方案。 综观Hazelcast的源代码,看来网络代码在节点建设自动执行,并没有配置操作量为我工作。 我很想来,否则如果可能的话表示。

在任何情况下,我能够完成我所需要的单元测试:

作为EasyMock的时间长的用户,我不知道如何干净地测试调用的代码Hazelcast.newHazelcastInstance(config); 因为它是一个静态方法调用。 这实际上是什么促使我提出这个问题 - 我只是想在内存中,只有Hazelcast实例进行测试。 我不想尝试我们的限制构建机器上的网络运营 - 我不知道,如果机器被限制到足以使Hazelcast的发现逻辑可能会失败的构建。

后来我发现PowerMock的扩展EasyMock的,让我嘲笑的静态方法调用。

随着EasyMock的和PowerMock,我能够充分单元测试在我们的项目中的所有Hazelcast相关的代码,而无需实际启动Hazelcast环境。



Answer 4:

我能够做同样的的Mockito 。 例如,一个主题 :

HazelcastInstance hazelcastInstance = Mockito.mock(HazelcastInstance.class);
Mockito.when(hazelcastInstance.getTopic("yourtopic")).thenReturn(Mockito.mock(ITopic.class));


Answer 5:

您可以在内存中创建一个没有嘲笑这样的:

HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();

在构造函数其他PARAMS你可以使用Mock,这样一来你的代码将工作做好。



Answer 6:

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

(Link是德国人,但代码是Java)



文章来源: How do you create a Hazelcast instance embedded in-process/in-memory, without networking?