The following practices help improve test reliability, execution speed, and reproducibility when writing tests for Hazelcast-powered applications.
Test isolation
- 
Use randomly generated cluster names to avoid clashes between instances meant to belong to different clusters, especially when running tests concurrently. 
- 
Use randomly assigned ports for the member endpoints, in case a network stack is spawned. 
- 
Always clean up resources after each test using factory.shutdownAll()orHazelcast.shutdownAll()in a teardown hook.
Cluster configuration
- 
Use mock networking for tests by default: it avoids the need for real sockets and speeds up execution. In case a real network is required use -Dhazelcast.test.use.network=true.
- 
Reserve real networking setups for network integration or system tests only. 
- 
Keep test clusters small (2–3 nodes) to validate partitioning, replication, and quorum logic efficiently. 
- 
Assert cluster size explicitly using assertClusterSizeEventually(…)before testing distributed operations relying on fully formed clusters.
- 
Assert nodes state explicitly with waitAllForSafeState(…)to make sure that all nodes are ready to operate (partition state isSAFE)
- 
Use a small number of partitions (for example 11) in your cluster configuration to expedite the cluster creation and test execution.
Managing flakiness
- 
Use @Repeatto detect flaky tests that might otherwise pass unreliably.
- 
Enable thread dump logging on failure by setting hazelcast.test.threadDumpOnFailure=true.
Hazelcast test properties
The following system properties can be configured to fine-tune test behavior:
- 
hazelcast.test.use.network=false: This is the default value to use mock networking. Set totrueto use real networking.
- 
hazelcast.test.threadDumpOnFailure=true: Print thread dumps when a test fails to aid debugging.
- 
hazelcast.phone.home.enabled=false: Disable phone home feature for clean test output.
- 
hazelcast.wait.seconds.before.join=1: Reduce wait time before a member attempts to join the cluster.
- 
hazelcast.local.localAddress=127.0.0.1: Bind test members to the loopback address to avoid conflicts.
- 
java.net.preferIPv4Stack=true: Ensure consistent networking on dual-stack systems.
It can also be useful to configure logging with:
- 
hazelcast.logging.type=log4j2: Configures logging with the specified log library (supported:jdk,log4j,log4j2, `none)
- 
hazelcast.logging.details.enabled=true: Logs name, IP address and version of the cluster
Miscellaneous
- 
Test execution durations are printed automatically when using HazelcastParallelClassRunnerorHazelcastSerialClassRunner.
- 
When using HazelcastParallelClassRunnerand tests fail with an error in initialization or instances aren’t shut down, some (other) tests may not properly shut down the clients/instances created. Make sure your tests do so.