Neo4j:如何正确进行Bolt驱动的单元测试

3

我正在将Neo4j Bolt驱动程序添加到我的应用程序中,按照http://neo4j.com/developer/java/的说明进行操作:

import org.neo4j.driver.v1.*;

Driver driver = GraphDatabase.driver( "bolt://localhost", AuthTokens.basic( "neo4j", "neo4j" ) );

Session session = driver.session();
session.run( "CREATE (a:Person {name:'Arthur', title:'King'})" );

StatementResult result = session.run( "MATCH (a:Person) WHERE a.name = 'Arthur' RETURN a.name AS name, a.title AS title" );

while ( result.hasNext() )

{
    Record record = result.next();
    System.out.println( record.get( "title" ).asString() + " " + record.get("name").asString() );
}
session.close();
driver.close();

然而,根据官方文档,单元测试通常使用以下方式进行:

GraphDatabaseService db = new TestGraphDatabaseFactory()
            .newImpermanentDatabaseBuilder()

如果我想以某种方式测试上面的代码,我必须使用来自测试的GraphDatabaseService替换GraphDatabase.driver("bolt://localhost",...)。我该如何做?据我所见,我无法从中提取任何类型的内存驱动程序

2个回答

2

谢谢!这看起来就是我想要的。不过,有没有可用的Maven仓库呢?或者唯一的方法是将neo4j-jdbc包添加到jar中? - Randomize
我发现在第二个里程碑之前有: "it.larus-ba" % "neo4j-jdbc" % "3.0-M02"。对于第三个里程碑,他们将把groupId移动到"org.neo4j"。 - Randomize
我现在想知道使用neo4j-bolt驱动程序的最少依赖清单是什么 :) - Randomize
它最初是与一家合作公司开发的,他们将他们的代码捐赠给了neo4j-contrib。在mvn central上,它目前位于:http://mvnrepository.com/artifact/it.larus-ba - M03尚未被推送到maven repo。敬请关注。 - Stefan Armbruster
以下是更简单的解决方案(我知道回答晚了):-) - fbiville
显示剩余2条评论

1
现在一个简单的方法是拉取neo4j-harness,并使用他们内置的Neo4jRule,如下所示:
import static org.neo4j.graphdb.factory.GraphDatabaseSettings.boltConnector;
// [...]
@Rule public Neo4jRule graphDb = new Neo4jRule()
        .withConfig(boltConnector("0").address, "localhost:" + findFreePort());

findFreePort 的实现可以非常简单:

private static int findFreePort() {
    try (ServerSocket socket = new ServerSocket(0)) {
        return socket.getLocalPort();
    } catch (IOException e) {
        throw new RuntimeException(e.getMessage(), e);
    }
}

作为ServerSocketJavadoc解释:

端口号为0意味着端口号会自动分配,通常从短暂端口范围内分配。可以通过调用getLocalPort来检索此端口号。

此外,在返回端口值之前,套接字将被关闭,因此返回的端口仍然可用的可能性很大(在其间重新分配端口的机会很小——窗口大小的计算留给读者作为练习)。
Et voilà!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接