2017-06-28 77 views
0

如何使用jCache和HazelcastProvider实现缓存单元测试?使用Hazelcast提供程序测试jCache

目前我得到这个错误:

Caused by: java.lang.IllegalStateException: Unable to connect to any address in the config! The following addresses were tried: [localhost/127.0.0.1:5701, localhost/127.0.0.1:5702, localhost/127.0.0.1:5703] 

简化下面的代码:

@RunWith(SpringJUnit4ClassRunner.class) 
@TestPropertySource("classpath:provider.properties") 
@ContextConfiguration(classes = { 
    CustomCacheConfiguration.class 
}) 

与多播一起hazelcast.xml文件我已经缓存声明,所以我的理解是正确的,我应该有一个嵌入式实例。

//编辑

这里是hazelcast.xml文件:

<hazelcast xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.hazelcast.com/schema/config 
          http://www.hazelcast.com/schema/config/hazelcast-config-3.8.xsd" 
     xmlns="http://www.hazelcast.com/schema/config"> 
    <group> 
     <name>test</name> 
     <password>test</password> 
    </group> 
    <network> 
     <join> 
      <multicast enabled="true"/> 
     </join> 
    </network> 

    <!-- cache definitions --> 
</hazelcast> 

而且这里是日志:

Jun 28, 2017 10:55:45 AM com.hazelcast.client.config.XmlClientConfigLocator 
INFO: Loading 'hazelcast-client-default.xml' from classpath. 
Jun 28, 2017 10:55:45 AM com.hazelcast.client.config.XmlClientConfigLocator 
INFO: Loading 'hazelcast-client-default.xml' from classpath. 
Jun 28, 2017 10:55:45 AM com.hazelcast.core.LifecycleService 
INFO: hz.client_0 [dev] [3.8.2] HazelcastClient 3.8.2 (20170518 - a60f944) is STARTING 
Jun 28, 2017 10:55:46 AM com.hazelcast.core.LifecycleService 
INFO: hz.client_0 [dev] [3.8.2] HazelcastClient 3.8.2 (20170518 - a60f944) is STARTED 
Jun 28, 2017 10:55:46 AM com.hazelcast.client.spi.impl.ClusterListenerSupport 
INFO: hz.client_0 [dev] [3.8.2] Trying to connect to [127.0.0.1]:5701 as owner member 
Jun 28, 2017 10:55:46 AM com.hazelcast.client.spi.impl.ClusterListenerSupport 
INFO: hz.client_0 [dev] [3.8.2] Trying to connect to [127.0.0.1]:5702 as owner member 
Jun 28, 2017 10:55:46 AM com.hazelcast.client.spi.impl.ClusterListenerSupport 
INFO: hz.client_0 [dev] [3.8.2] Trying to connect to [127.0.0.1]:5703 as owner member 
Jun 28, 2017 10:55:46 AM com.hazelcast.client.spi.impl.ClusterListenerSupport 
WARNING: hz.client_0 [dev] [3.8.2] Unable to get alive cluster connection, try in 2940 ms later, attempt 1 of 2. 
Jun 28, 2017 10:55:49 AM com.hazelcast.client.spi.impl.ClusterListenerSupport 
INFO: hz.client_0 [dev] [3.8.2] Trying to connect to [127.0.0.1]:5703 as owner member 
Jun 28, 2017 10:55:49 AM com.hazelcast.client.spi.impl.ClusterListenerSupport 
INFO: hz.client_0 [dev] [3.8.2] Trying to connect to [127.0.0.1]:5702 as owner member 
Jun 28, 2017 10:55:49 AM com.hazelcast.client.spi.impl.ClusterListenerSupport 
INFO: hz.client_0 [dev] [3.8.2] Trying to connect to [127.0.0.1]:5701 as owner member 
Jun 28, 2017 10:55:49 AM com.hazelcast.client.spi.impl.ClusterListenerSupport 
WARNING: hz.client_0 [dev] [3.8.2] Unable to get alive cluster connection, try in 2996 ms later, attempt 2 of 2. 
Jun 28, 2017 10:55:52 AM com.hazelcast.core.LifecycleService 
INFO: hz.client_0 [dev] [3.8.2] HazelcastClient 3.8.2 (20170518 - a60f944) is SHUTTING_DOWN 
Jun 28, 2017 10:55:52 AM com.hazelcast.core.LifecycleService 
INFO: hz.client_0 [dev] [3.8.2] HazelcastClient 3.8.2 (20170518 - a60f944) is SHUTDOWN 
+0

你能后的日志?可能是Hazelcast没有开始。严格地说,这不会是一个单元测试,你可能想要使用模拟对象。或者,查看https://github.com/hazelcast/hazelcast/tree/master/hazelcast/src/test/java/com/hazelcast/cache,了解测试如何在那里运行。 –

+1

您应该检查类路径和其他bean。 hazelcast.xml文件将被Hazelcast服务器使用,无论你是否启动一个,或者它的启动不够快。你有错误信息来自'HazelcastClient'。客户端正在启动,无法找到要连接的服务器 - 因此无论是启动客户端而不是服务器,还是服务器之前的客户端。 –

+0

问题是我没有在任何地方启动客户端,看起来,在测试过程中,hazelcast无法加载我的xml文件,因此加载了默认的客户端。 – Forin

回答

0

我想我已经找到了解决办法。

我创造了新的hazelcast-test.xml文件,下面的XML:

<hazelcast xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.hazelcast.com/schema/config 
          http://www.hazelcast.com/schema/config/hazelcast-config-3.9.xsd" 
     xmlns="http://www.hazelcast.com/schema/config"> 

    <properties> 
     <property name="hazelcast.shutdownhook.enabled">false</property> 
    </properties> 

    <network> 
     <join> 
      <multicast enabled="false"/> 
      <tcp-ip enabled="false"/> 
     </join> 
    </network> 

    <import resource="classpath:hazelcast-cache-declarations.xml"/> 
</hazelcast> 

然后在我加入这个测试:

@BeforeClass 
public void init() { 
    Config config = new ClasspathXmlConfig("hazelcast-test.xml"); 
    HazelcastInstance instance = Hazelcast.newHazelcastInstance(config); 
} 

@AfterClass 
public void clean() { 
    Hazelcast.shutdownAll(); 
} 
+0

你在'@ Before'而不是'@ BeforeClass'中创建Hazelcast实例,所以如果你有多个'@ Test'方法,你将会有多个实例。这可以解释错误,但是在任何原因显而易见之前,确实需要上传更多的代码。 –

+0

我已经修复了它,谢谢指出'@ BeforeClass'注解。我已经改变了答案,现在所有的测试工作。 – Forin

相关问题