首页 文章

测试Neo4j托管扩展

提问于
浏览
2

我已按照http://neo4j.com/docs/stable/server-plugins.html的指导原则为Neo4j编写了服务器扩展 . 我为一些内部方法编写了单元测试,但是如果可能的话我还想测试REST接口 .

http://neo4j.com/docs/stable/_testing_your_extension.html似乎只展示了如何测试非托管扩展,但我正在寻找与托管扩展非常类似的东西 . 有什么指针吗?

我知道如何将扩展加载到服务器并使用 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服务器 . 我想一旦有了服务器,我可以使用各种策略查询它并检查结果 .

2 回答

  • 0

    如果我错了,请纠正我,但这听起来像是关于测试RESTful API的更普遍的问题 .

    由于您已经标记了junit,因此您可能需要考虑像restfuse这样的JUnit的RESTful 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扩展,这使得制作请求和检查结果非常容易(想想一个更简单的卷曲界面,你现在正在使用) .

    最后,FWIW还有其他测试RESTful API的方法 . 选择您喜欢的技术或堆栈,无论是frisby on javascript还是vREST .

  • 1

    它在文档中有点隐藏,要么使用 ServerBuilder (它位于 org.neo4j.app:neo4j-server:test-jar )中启动CommunityNeoServer,要么使用此处记录的新测试工具:http://neo4j.com/docs/stable/_testing_your_extension.html

    <dependency>
       <groupId>org.neo4j.test</groupId>
       <artifactId>neo4j-harness</artifactId>
       <version>${neo4j.version}</version>
       <scope>provided</scope>
    </dependency>
    

    测试工具包提供了一种机制,可以使用自定义配置和您选择的扩展来启动Neo4j实例 . 它还提供了指定数据夹具的机制,以便在启动Neo4j时包含 .

    用法示例 .

    @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() );
        }
    }
    

相关问题