Java 如何使用自定义非托管扩展对Neo4j运行测试?
我有自己的自定义编写的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提
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();
注:
是提供自定义功能的JAX-RS资源SomeResource
- 如果您有多个资源,并且希望使用类来指定非托管扩展,而不是字符串,则无需指定所有这些类。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测试框架测试非托管扩展的更详细说明
现在一切都应该启动并运行,并准备好进行测试。祝你好运 感谢您的深入解释!