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

时间:2017-02-21 20:14:02

标签: neo4j graphaware

我使用Graphaware软件包为Neo4j开发了一个模块。作为我的模块的一部分,我想确保数据库中存在一些索引和/或约束。为此,我使用BaseTxDrivenModule.initialize方法运行一些Cypher语句:

@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,您就会看到测试永远不会完成。

1 个答案:

答案 0 :(得分:1)

无法保证在测试期间启动Runtime,您必须通过调用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模块中的一些测试用例,例如。