For easier unit testing, I could imagine two approaches: 1) providing a few base classes that provide methods for creating/shutting down a temporary graph database, and maybe @Before/@After type annotation; 2) a TemporaryGraphDatabaseService which manages itself.
For #2, I'm imagining use like: @Test public void shouldUseATemporaryGraph() { GraphDatabaseService graphdb = new TemporaryGraphDatabaseService(); // do stuff with the graph, including managing transactions ... // that's it. No explicit shutdown. The TemporaryGraphDatabaseService() should politely clean up after itself during finalization. } Initial implementations for both approaches would use the system temp area to create files. Not too bad, right? Cheers, Andreas On Oct 19, 2010, at 5:43 PM, nikola sijakinjic wrote: >> Are you interested in easier unit-testing, or are you interested in >> in-memory to have all the graph semantics without being persistent? >> > > I want it all :)) at this moment I am more interested in easy unit testing, > but looking forward to see neo4j in-memory release. Thank you for your fast > reply. > > Cheers, > Nikola > > Cheers, >> Andreas >> >> On Oct 19, 2010, at 4:55 PM, nikola sijakinjic wrote: >> >>> Hi Andreas, >>> >>> thank you for your effort ! But I am looking for a way to detach neo4j >>> completely from file system. What I understood from thread below, there >> is a >>> way to start neo4j so it works only in memory, creating no files, so >> there >>> is no need to delete db files with every test run. >>> >>> Best, >>> Nikola >>> >>> >>> On Tue, Oct 19, 2010 at 4:25 PM, Andreas Kollegger < >>> andreas.kolleg...@neotechnology.com> wrote: >>> >>>> Hi Nikola, >>>> >>>> Below is a baseline for unit testing neo4j. Please let me know if you >> have >>>> any ideas for helpers that would make writing tests easier. It might be >>>> useful to pull together a package of base classes and maybe hamcrest >>>> matchers that are common to all testing. >>>> >>>> Cheers, >>>> Andreas >>>> >>>> package org.neo4j.examples; >>>> >>>> import org.junit.*; >>>> import org.neo4j.graphdb.GraphDatabaseService; >>>> import org.neo4j.graphdb.Node; >>>> import org.neo4j.graphdb.Transaction; >>>> import org.neo4j.kernel.EmbeddedGraphDatabase; >>>> >>>> import java.io.File; >>>> >>>> import static org.hamcrest.Matchers.greaterThan; >>>> import static org.hamcrest.Matchers.is; >>>> import static org.junit.Assert.assertThat; >>>> >>>> /** >>>> * An example of unit testing with Neo4j. >>>> */ >>>> public class Neo4jBaseTest >>>> { >>>> /** >>>> * Base directory for temporary database. >>>> */ >>>> protected File testDirectory = new File( "target/var" ); >>>> >>>> /** >>>> * Full path to the temporary database. >>>> */ >>>> protected File testDatabasePath = new File( testDirectory, "testdb" ); >>>> protected GraphDatabaseService graphDb; >>>> >>>> >>>> /** >>>> * Create temporary database for each unit test. >>>> * <p/> >>>> * This will delete any existing database prior to creating a new one. >>>> */ >>>> @Before >>>> public void prepareTestDatabase() >>>> { >>>> deleteFileOrDirectory( testDatabasePath ); >>>> graphDb = new EmbeddedGraphDatabase( >>>> testDatabasePath.getAbsolutePath() ); >>>> } >>>> >>>> /** >>>> * Shutdown the database. >>>> */ >>>> @After >>>> public void destroyTestDatabase() >>>> { >>>> graphDb.shutdown(); >>>> } >>>> >>>> protected void deleteFileOrDirectory( File path ) >>>> { >>>> if ( path.exists() ) >>>> { >>>> if ( path.isDirectory() ) >>>> { >>>> for ( File child : path.listFiles() ) >>>> { >>>> deleteFileOrDirectory( child ); >>>> } >>>> } >>>> path.delete(); >>>> } >>>> } >>>> >>>> >>>> @Test >>>> public void shouldCreateNode() >>>> { >>>> Transaction tx = graphDb.beginTx(); >>>> Node n = null; >>>> try >>>> { >>>> n = graphDb.createNode(); >>>> n.setProperty( "name", "Nancy" ); >>>> tx.success(); >>>> } catch ( Exception e ) >>>> { >>>> tx.failure(); >>>> } finally >>>> { >>>> tx.finish(); >>>> } >>>> >>>> // The node should have an id greater than 0, which is the id of >> the >>>> reference node. >>>> assertThat( n.getId(), is( greaterThan( 0l ) ) ); >>>> >>>> // Retrieve a node by using the id of the created node. The id's >> and >>>> property should match. >>>> Node foundNode = graphDb.getNodeById( n.getId() ); >>>> assertThat( foundNode.getId(), is( n.getId() ) ); >>>> assertThat( (String) foundNode.getProperty( "name" ), is( "Nancy" >> ) >>>> ); >>>> >>>> } >>>> >>>> } >>>> >>>> >>>> >>>> On Oct 19, 2010, at 2:39 PM, nikola sijakinjic wrote: >>>> >>>>> Hello, >>>>> >>>>> I am interested in neo4j unit testing. I founded this conversation >>>> in >>>>> archive, and this looks interesting, but I failed to find function >>>> setup() >>>>> to override. >>>>> What class should i look for ? >>>>> >>>>> best, >>>>> Nikola >>>>> >>>>> You can also create the graph on a temp folder and remove it >>>>> overriding setup() on a base class. >>>>> That's how we do it for our unit tests. >>>>> >>>>> 2010/2/10 Thomas Andersson <greddbul...@gmail.com>: >>>>>> Hi, >>>>>> >>>>>> Is it possible to run neo4j in memory only, that is, without a >>>>>> directory in the file system? >>>>>> >>>>> _______________________________________________ >>>>> Neo4j mailing list >>>>> User@lists.neo4j.org >>>>> https://lists.neo4j.org/mailman/listinfo/user >>>> >>>> _______________________________________________ >>>> Neo4j mailing list >>>> User@lists.neo4j.org >>>> https://lists.neo4j.org/mailman/listinfo/user >>>> >>> _______________________________________________ >>> Neo4j mailing list >>> User@lists.neo4j.org >>> https://lists.neo4j.org/mailman/listinfo/user >> >> _______________________________________________ >> Neo4j mailing list >> User@lists.neo4j.org >> https://lists.neo4j.org/mailman/listinfo/user >> > _______________________________________________ > Neo4j mailing list > User@lists.neo4j.org > https://lists.neo4j.org/mailman/listinfo/user _______________________________________________ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user