2013-01-12 1 views
9

私のユニットテストでは、ネットワーク操作を開始または実行しようとしない埋め込み型(インプロセス/インメモリ)Hazelcastインスタンスを作成したいと考えています。ネットワークなしでインプロセス/インメモリに埋め込まれたHazelcastインスタンスを作成するにはどうすればよいですか?

どうすればよいですか?

これが不可能であることが表示されますが、私は以下の言及ユニットテストの目的のために良い解決策がある:自分の質問に答える

Config config = new Config(); 

// what goes here? 

HazelcastInstance inProcessOnly = Hazelcast.newHazelcastInstance(config); 

答えて

2

:たとえば

。 Hazelcastのソースコードを見ると、ネットワーク構築のコードがNode構築時に自動的に実行され、Config操作の量は私のために働かなかったようです。可能であれば、私は別の方法で見せたいと思っています。いずれにしても

、私はユニットテストのために必要なものを達成することができた。それがあったので、EasyMockの長時間の使用者として

、私はきれいにHazelcast.newHazelcastInstance(config);を呼び出したコードをテストする方法を知りませんでした静的メソッド呼び出し。実際にこの質問をするようになったのは、メモリー内のみのHazelcastインスタンスをテストしたいだけでした。制限されたビルドマシンでネットワーク操作を試みることは望んでいませんでした.Hazelcastのディスカバリロジックがビルドに失敗するほどマシンが制限されているかどうかはわかりませんでした。

私は、EasyMockにPowerMockさんの拡張機能があり、静的メソッド呼び出しを模擬することができました。

EasyMockとPowerMockでは、実際にHazelcast環境を起動することなく、プロジェクト内のすべてのHazelcast関連コードを完全にユニットテストすることができました。

2

Mockitoと同じことができました。例えば、Topicで:

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

あなたはまた、内部ユニットテストのためにHazelcastで使用されTestHazelcastInstanceFactoryを使用することができます。あなたはそれのために、このMavenの依存関係を追加する必要があります。

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

は、それが使用する方法の例についてはBasicCacheTestを参照してください。

+0

リンクが死んでいます。 – asmaier

+0

Thx。リンクを修正しました。 –

6

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

あなたはこのようなモックせずにメモリ内に作成することができます:あなたのコンストラクタで

HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(); 

その他のparamsあなたは、あなたのコードがうまく動作します。この方法でモックを使用することができます。ここで説明するように

関連する問題