Neo4j 提供了名为neo4j-harness
这使得为非托管扩展编写集成测试变得更加容易。更多信息是可以在这里找到 http://neo4j.com/docs/stable/server-unmanaged-extensions-testing.html.
博客文章 http://vrublevsky.me/neo4j/java/how-to-run-tests-against-neo4j-database-with-unmanaged-extension.html
1)确定需要(使用)的Neo4j版本。
Maven:
<properties>
<version.neo4j>2.2.5</version.neo4j>
</properties>
2)添加依赖neo4j-harness
.
Maven:
<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) 确保非托管扩展源在测试中可用。
Maven:
如果您将测试写入具有扩展名的同一模块中,那么一切都可以。
如果您在单独的模块中编写测试(即integration-tests
),然后确保该扩展在那里可用。
<dependency>
<groupId>my.company</groupId>
<artifactId>unmanaged-extension</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
4)创建Neo4jTestServer
负责数据库启动和关闭的类。
/**
* Spin-up Neo4j server with loaded unmanaged extension.
*/
public final class Neo4jTestServer {
public static final String EXTENSION_MOUNT_POINT = "/ext";
public static final String EXTENSION_RESOURCES = "my.company.extension.resources";
// Alternative way to get package
// public static final String EXTENSION_RESOURCES = SomeResource.class.getPackage().getName();
private static Neo4jTestServer INSTANCE = null;
public static synchronized Neo4jTestServer getInstance() {
if (INSTANCE == null) {
INSTANCE = new Neo4jTestServer();
}
return INSTANCE;
}
private final ServerControls serverControls;
private Neo4jTestServer() {
serverControls = TestServerBuilders.newInProcessBuilder()
.withExtension(EXTENSION_MOUNT_POINT, EXTENSION_RESOURCES)
// Resource can be specified directly
// .withExtension(EXTENSION_MOUNT_POINT, SomeResource.class)
.newServer();
}
public ServerControls getServerControls() {
return serverControls;
}
public void shutdown() {
serverControls.close();
}
}
Usage:
Neo4jTestServer server = Neo4jTestServer.getInstance();
// Get Neo4j server URI, with port
server.getServerControls().getHttpUri();
// Shutdown server
server.shutdown();
Notes:
-
SomeResource
是提供自定义功能的 JAX-RS 资源
- 如果您有超过 1 个资源,并且想要使用类来指定非托管扩展,而不是字符串 - 则无需指定所有这些类。 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
EDIT:Graphaware测试框架,信息提供者MicTech https://stackoverflow.com/users/69684/mictech
或者,有图形感知测试 https://github.com/graphaware/neo4j-framework/tree/master/tests框架提供者图形意识 http://graphaware.com/,这使得测试任何 Neo4j 相关代码成为可能。
该模块提供了一种轻松测试以某种方式与 Neo4j 数据库通信的代码的方法。该模块的目标受众是编写 Neo4j 相关代码的 Java 开发人员,以及 GraphAware 模块和 API 的作者。
Here http://graphaware.com/blog/testing/您可以找到一些关于如何使用框架的帖子(由 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'})");
}
}
Here https://github.com/graphaware/neo4j-framework/tree/master/tests#unmanaged-extension可以找到有关如何使用 Graphaware 测试框架测试非托管扩展的更详细说明。
现在一切都应该已启动并运行并准备好进行测试。祝你好运!