2013-01-12 6 views

Antwort

2

meine eigene Frage zu beantworten:

Es scheint, dass dies nicht möglich ist, aber es ist eine gute Lösung für die Einheit Testzwecke, die ich weiter unten erwähnt. Wenn man sich Hazelcasts Quellcode anschaut, scheint es, dass der Netzwerkcode bei der Node-Konstruktion automatisch ausgeführt wird und keine Menge an Konfigurationsmanipulationen für mich funktionierte. Ich würde gerne anders gezeigt, wenn möglich.

Auf jeden Fall konnte ich erreichen, was ich für Unit-Tests benötigt:

Als langjähriger Nutzer von EasyMock, ich war nicht bewusst, wie sauber um den Code zu testen, die Hazelcast.newHazelcastInstance(config); aufgerufen, da es eine war statischer Methodenaufruf Das hat mich in der Tat dazu veranlasst, diese Frage zu stellen - ich wollte nur eine In-Memory-Hazelcastinstanz zum Testen. Ich wollte nicht, dass Netzwerkoperationen auf unserer eingeschränkten Build-Maschine ausgeführt werden. Mir war nicht bekannt, ob die Maschine so stark eingeschränkt war, dass die Erstellungslogik von Hazelcast möglicherweise fehlschlug.

Ich fand dann PowerMock 's Erweiterung zu EasyMock, so dass ich statischen Methodenaufrufen Mock.

Mit EasyMock und PowerMock war ich in der Lage, alle Hazelcast-bezogenen Codes in unserem Projekt vollständig zu testen, ohne tatsächlich eine Hazelcast-Umgebung zu starten.

2

Ich konnte das gleiche mit tun. Zum Beispiel mit einem Topic:

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

können Sie auch TestHazelcastInstanceFactory verwenden, die auch von Hazelcast für Unit-Tests intern verwendet wird. Sie müssen diese Maven Abhängigkeit für sie hinzuzufügen:

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

Siehe BasicCacheTest für ein Beispiel, wie es verwendet wird.

+0

Link zu BasisCacheTest tot ist. – asmaier

+0

Thx. Die Verknüpfung wurde korrigiert. –

6

FWIW Ich habe einen Test in Hazelcast 3.6.1 erstellt und den Netzwerkcluster mit dem folgenden Code im Konstruktor programmgesteuert deaktiviert. Dies erstellt einen eigenständigen Server zum Testen.

Es ist nicht so schnell wie mit einem Mock, aber es ist schneller als die Standardkonfiguration zu akzeptieren.

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

Sie können ohne Mock wie dies in Erinnerung erstellen:

HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(); 

Andere params in Ihrem Konstruktor können Sie Mock verwenden, auf diese Weise wird Ihr Code gut funktionieren.