Rest 测试Neo4j托管扩展

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

我已经为Neo4j编写了一个服务器扩展,遵循了上的指导原则。我为一些内部方法编写了单元测试,但如果可能的话,我还想测试REST接口

似乎只展示了如何测试非托管扩展,但我正在寻找类似于托管扩展的东西。有什么建议吗

我确实知道如何将扩展加载到服务器并使用
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() );
    }
}