由于CREATE INDEX和CREATE CONSTRAINT而无法运行单元测试

问题描述:

我已经为使用Graphaware软件包的Neo4j开发了一个模块。作为我的模块的一部分,我想确保数据库中存在一些索引和/或约束。为此,我用BaseTxDrivenModule.initialize方法来运行一对夫妇的Cypher声明:由于CREATE INDEX和CREATE CONSTRAINT而无法运行单元测试

@Override 
public void initialize(GraphDatabaseService database) 
{ 
    database.execute("CREATE CONSTRAINT ON (n:`Label`) ASSERT n.`id` IS UNIQUE;"); 
    database.execute("CREATE INDEX ON n:`Label2`(`id`) IS UNIQUE;"); 
} 

这些语句在生产中成功运行,当我的Neo4j的服务器实例部署模块。但是当我想要运行单元测试时,作为构建过程的一部分,执行会挂起并且永远不会结束。当我省略initialize方法时,它会继续运行而不会出现任何错误。

最糟糕的部分是我必须构建如下的包:mvn package -Dmaven.test.skip=true或者它不会构建任何东西。

所以我的问题是,为什么?我该如何解决这个问题?

下面是一个示例演示项目的问题:

https://github.com/ziadloo/test_neo4j_module

只是克隆并运行mvn package,你会看到测试写不完。

+0

你能提供一个有问题的测试项目吗? –

+0

@ChristopheWillemsen我 – Mehran

+0

感谢更新的问题,克隆,调整和回答 –

没有该运行系统在测试期间开始的保证,你必须通过调用waitUntilStarted方法断言它。

@Before 
    public void setUp() { 
     database = new TestGraphDatabaseFactory() 
      .newImpermanentDatabaseBuilder() 
      .loadPropertiesFromFile(this.getClass().getClassLoader().getResource("neo4j-module.conf").getPath()) 
      .newGraphDatabase(); 

     getRuntime(database).waitUntilStarted(); 

     registerShutdownHook(database); 
    } 

我建议你看一下neo4j-uuid模块中的一些测试用例,例如。

+0

谢谢你,我会考虑的第一机会,我得到。 – Mehran