The basic pattern of unit testing with Neo4j is illustrated by the following example.
To access the Neo4j testing facilities you should have the neo4j-kernel
tests.jar together with the neo4j-io
tests.jar on the classpath during tests.
You can download them from Maven Central: org.neo4j:neo4j-kernel and org.neo4j:neo4j-io.
Using Maven as a dependency manager you would typically add this dependency together with JUnit and Hamcrest like so:
Maven dependency
<project> ... <dependencies> <dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j-kernel</artifactId> <version>3.1.0-SNAPSHOT</version> <type>test-jar</type> <scope>test</scope> </dependency> <dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j-io</artifactId> <version>3.1.0-SNAPSHOT</version> <type>test-jar</type> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-all</artifactId> <version>1.3</version> <scope>test</scope> </dependency> ... </dependencies> ... </project>
Observe that the <type>test-jar</type>
is crucial.
Without it you would get the common neo4j-kernel
jar, not the one containing the testing facilities.
With that in place, we’re ready to code our tests.
Tip For the full source code of this example see: Neo4jBasicDocTest.java |
Before each test, create a fresh database:
@Before public void prepareTestDatabase() { graphDb = new TestGraphDatabaseFactory().newImpermanentDatabase(); }
After the test has executed, the database should be shut down:
@After public void destroyTestDatabase() { graphDb.shutdown(); }
During a test, create nodes and check to see that they are there, while enclosing write operations in a transaction.
Node n = null; try ( Transaction tx = graphDb.beginTx() ) { n = graphDb.createNode(); n.setProperty( "name", "Nancy" ); tx.success(); } // The node should have a valid id assertThat( n.getId(), is( greaterThan( -1L ) ) ); // Retrieve a node by using the id of the created node. The id's and // property should match. try ( Transaction tx = graphDb.beginTx() ) { Node foundNode = graphDb.getNodeById( n.getId() ); assertThat( foundNode.getId(), is( n.getId() ) ); assertThat( (String) foundNode.getProperty( "name" ), is( "Nancy" ) ); }
If you want to set configuration parameters at database creation, it’s done like this:
GraphDatabaseService db = new TestGraphDatabaseFactory() .newImpermanentDatabaseBuilder() .setConfig( GraphDatabaseSettings.pagecache_memory, "512M" ) .setConfig( GraphDatabaseSettings.string_block_size, "60" ) .setConfig( GraphDatabaseSettings.array_block_size, "300" ) .newGraphDatabase();