Rest 测试Neo4j托管扩展
我已经为Neo4j编写了一个服务器扩展,遵循了上的指导原则。我为一些内部方法编写了单元测试,但如果可能的话,我还想测试REST接口 似乎只展示了如何测试非托管扩展,但我正在寻找类似于托管扩展的东西。有什么建议吗 我确实知道如何将扩展加载到服务器并使用Rest 测试Neo4j托管扩展,rest,testing,junit,neo4j,Rest,Testing,Junit,Neo4j,我已经为Neo4j编写了一个服务器扩展,遵循了上的指导原则。我为一些内部方法编写了单元测试,但如果可能的话,我还想测试REST接口 似乎只展示了如何测试非托管扩展,但我正在寻找类似于托管扩展的东西。有什么建议吗 我确实知道如何将扩展加载到服务器并使用curl(如下所示)查询它,但当出现问题时,这并不是一个有趣的调试周期 curl -X POST -v http://localhost:7474/db/data/ext/NeoPlugin/graphdb/myExt \ -H "Content
curl
(如下所示)查询它,但当出现问题时,这并不是一个有趣的调试周期
curl -X POST -v http://localhost:7474/db/data/ext/NeoPlugin/graphdb/myExt \
-H "Content-Type: application/json" \
-d '{"argFoo": "ACTED_IN", "argBar": ["0", "10"]}'
更新:
我陷入困境的主要部分(或者仅仅是第一部分)是构建一个轻量级测试REST服务器,它包含我的托管扩展。我认为一旦有了服务器,我就可以使用各种策略查询它并检查结果。如果我错了,请纠正我,但这听起来像是关于测试RESTful API的更一般的问题 <>既然您已经标记了JUnit,您可能需要考虑一些类似于JUnit的REST API测试扩展。如果您已经在使用neo4j提供的线束测试非托管扩展,那么这可能是最佳选择 RESTful测试可能如下所示:
@RunWith( HttpJUnitRunner.class )
public class RestfuseTest {
@Rule
public Destination destination = new Destination( "http://localhost:7474/db/data/ext/NeoPlugin/graphdb/myExt" );
@Context
private Response response; // will be injected after every request
@HttpTest( method = Method.GET, path = "/" )
public void checkRestfuseOnlineStatus() {
assertOk( response );
}
}
对于更多的“零售”测试,而不是“批发”编程测试,我倾向于在Chrome上使用Postman扩展,这使得制作请求和检查结果非常容易(考虑一个更容易的curl接口,您现在正在使用)
最后,对于测试RESTful API的其他方法,有很多选项。选择您最喜欢的技术或堆栈,无论是或。文档中有点隐藏,要么您使用
ServerBuilder
(位于org.neo4j.app:neo4j服务器:测试jar
)启动CommunityNeoServer,要么您使用此处记录的新测试工具:
我将编辑我的问题-我认为这里的主要问题不是用测试查询影响REST服务器,而是首先要弄清楚如何启动测试REST服务器。Neo2j似乎对非托管扩展有一些特殊的帮助,但我无法为托管扩展找到它。是的,这与我在最初的问题中链接到的文档相同,但我仍然不理解托管扩展=(我可以很好地运行您的示例,并且它成功了,但是当我用my
NeoPlugin.class
托管扩展替换MyUnmanagedException.class
时,调用失败,说“com.sun.jersey.api.container.ContainerException:ResourceConfig实例不包含任何根资源类。”
<dependency>
<groupId>org.neo4j.test</groupId>
<artifactId>neo4j-harness</artifactId>
<version>${neo4j.version}</version>
<scope>provided</scope>
</dependency>
@Path("")
public static class MyUnmanagedExtension
{
@GET
public Response myEndpoint()
{
return Response.ok().build();
}
}
@Test
public void testMyExtension() throws Exception
{
// Given
try ( ServerControls server = TestServerBuilders.newInProcessBuilder()
.withExtension( "/myExtension", MyUnmanagedExtension.class )
.newServer() )
{
// When
HTTP.Response response = HTTP.GET( server.httpURI().resolve( "myExtension" ).toString() );
// Then
assertEquals( 200, response.status() );
}
}