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

Reply via email to