由于 CREATE INDEX 和 CREATE CONSTRAINT,无法进行 运行 单元测试
Incapable of running unit tests because of CREATE INDEX and CREATE CONSTRAINT
我使用 Graphaware 包为 Neo4j 开发了一个模块。作为我模块的一部分,我想确保数据库中存在一些索引 and/or 约束。为此,我使用 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
,您会发现测试永远不会完成。
无法保证运行时在您的测试期间启动,您必须通过调用 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 模块中的一些测试用例,例如
我使用 Graphaware 包为 Neo4j 开发了一个模块。作为我模块的一部分,我想确保数据库中存在一些索引 and/or 约束。为此,我使用 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
,您会发现测试永远不会完成。
无法保证运行时在您的测试期间启动,您必须通过调用 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 模块中的一些测试用例,例如