Java 如何使用自定义非托管扩展对Neo4j运行测试?

Java 如何使用自定义非托管扩展对Neo4j运行测试?,java,neo4j,Java,Neo4j,我有自己的自定义编写的Neo4j数据库非托管扩展 final Neo4jTestServer server = Neo4jTestServer.getInstance(); Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { server.shutdown(); } }); 我想对功能齐全的数据库运行集成测试,其中有非托管扩展可用。Neo4j提

我有自己的自定义编写的Neo4j数据库非托管扩展

final Neo4jTestServer server = Neo4jTestServer.getInstance();
Runtime.getRuntime().addShutdownHook(new Thread() {
    @Override
    public void run() {
        server.shutdown();
    }
});

我想对功能齐全的数据库运行集成测试,其中有非托管扩展可用。

Neo4j提供了名为
Neo4j-harness
的工具,可以更轻松地为非托管扩展编写集成测试。更多的形式是

<dependency>
    <groupId>my.company</groupId>
    <artifactId>unmanaged-extension</artifactId>
    <version>${project.version}</version>
    <scope>test</scope> 
</dependency>    

1) 确定所需的Neo4j版本(已使用)

马文:

<properties>
    <version.neo4j>2.2.5</version.neo4j>
</properties>
<dependency>
    <groupId>org.neo4j.test</groupId>
    <artifactId>neo4j-harness</artifactId>
    <version>${version.neo4j}</version>
    <!-- If you want to use Neo4j server in sources, instead of tests, then remove this line -->
    <scope>test</scope> 
</dependency>
3) 确保非托管扩展源在测试中可用

马文:
如果您使用扩展将测试写入同一模块,则一切正常。
如果您在单独的模块中编写测试(即
集成测试
),请确保扩展在那里可用

<dependency>
    <groupId>my.company</groupId>
    <artifactId>unmanaged-extension</artifactId>
    <version>${project.version}</version>
    <scope>test</scope> 
</dependency>    
用法:

Neo4jTestServer server = Neo4jTestServer.getInstance();
// Get Neo4j server URI, with port
server.getServerControls().getHttpUri();
// Shutdown server
server.shutdown();
注:

  • SomeResource
    是提供自定义功能的JAX-RS资源
  • 如果您有多个资源,并且希望使用类来指定非托管扩展,而不是字符串,则无需指定所有这些类。Neo4j将扫描指定类包中的其他资源,并自动加载它们
  • 所有资源都应该在同一个包中
提示:您可以在同一个包中创建
ResourcesRootPackageMarker
类,所有资源都驻留在该包中,并使用该类指定包。它使代码对未来的代码重构更有弹性

5) 可选。指定JVM关闭挂钩以关闭数据库

final Neo4jTestServer server = Neo4jTestServer.getInstance();
Runtime.getRuntime().addShutdownHook(new Thread() {
    @Override
    public void run() {
        server.shutdown();
    }
});
6) 要验证一切正常且非托管扩展可用,请执行测试,启动数据库并检查Neo4j服务器生成的输出

您应该看到如下内容:

INFO: Scanning for root resource and provider classes in the packages:
  my.company.extension.resources
Sep 14, 2015 5:25:15 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
  class my.company.extension.resources.SomeResource
  class my.company.extension.resources.AnotherResource

编辑:Graphaware测试框架,由提供的信息

或者,有一个由提供的框架,可以测试任何与Neo4j相关的代码

该模块提供了以某种方式轻松测试与Neo4j数据库对话的代码的方法。本模块的目标受众是编写Neo4j相关代码的Java开发人员,以及GraphAware模块和API的作者

您可以找到一些关于如何使用框架的帖子(由Graphaware开发人员自动编辑)

基本上,您需要做的是:

1) 创建扩展名:

@Path("/helloworld")
public class HelloWorldUnmanagedExtension {

    private final HelloWorldNodeCreator nodeCreator;

    public HelloWorldUnmanagedExtension(@Context GraphDatabaseService database) {
        nodeCreator = new HelloWorldNodeCreator(database);
    }

    @POST
    @Path("/create")
    public Response createHelloWorldNode() {
        Node node = nodeCreator.createHelloWorldNode();
        return Response.ok(String.valueOf(node.getId())).build();
    }
}
2) 使用
WrappingServerIntegrationTest
和必要的配置扩展测试

public class HelloWorldUnmanagedExtensionApiTest extends WrappingServerIntegrationTest {

    @Override
    protected Map<String, String> thirdPartyJaxRsPackageMappings() {
        return Collections.singletonMap("com.graphaware.example.unmanaged", "/ext");
    }

    @Test
    public void shouldCreateAndReturnNode() {
        String result = TestUtils.post(baseNeoUrl() + "/ext/helloworld/create", 200);
        assertEquals("0", result);

        GraphUnit.assertSameGraph(getDatabase(), "CREATE (:HelloWorld {hello:'world'})");
    }
}
公共类HelloWorldUnmanagedTensionPitest扩展了WrappingServerIntegrationTest{
@凌驾
受保护地图第三方jaxrPackageMappings(){
返回Collections.singletonMap(“com.graphaware.example.unmanaged”,“/ext”);
}
@试验
public void shouldCreateAndReturnNode(){
字符串结果=TestUtils.post(baseNeoUrl()+“/ext/helloworld/create”,200);
assertEquals(“0”,结果);
assertSameGraph(getDatabase(),“创建(:HelloWorld{hello:'world})”;
}
}
可以找到关于如何使用Graphaware测试框架测试非托管扩展的更详细说明



现在一切都应该启动并运行,并准备好进行测试。祝你好运

感谢您的深入解释!