2015-01-26 42 views
2

我已經編寫了Neo4j的服務器擴展,遵循http://neo4j.com/docs/stable/server-plugins.html的指導原則。我爲某些內部方法編寫了單元測試,但如果可能的話,我也想測試REST接口。測試Neo4j管理的擴展

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"]}' 

UPDATE: 主要(或只是第一個?)的一部分,我被陷在被旋轉了一個包含我的管理擴展一個輕量級的REST測試服務器。我想一旦有服務器,我可以使用各種策略查詢它並檢查結果。

回答

1

糾正我,如果我錯了,但這聽起來像一個關於測試RESTful API更普遍的問題。

由於您已經標記了junit,因此您可能需要考慮諸如restfuse這是JUnit的RESTful API測試擴展。如果您已經使用neo4j提供的線束測試了您的非託管擴展,那麼這可能是最合適的。

REST風格的測試可能是這個樣子:

@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的郵差擴展,這使得各具特色的請求,並檢查結果非常簡單(想想現在使用的更容易捲曲的界面)。

最後,FWIW還有其他測試RESTful API的方法的gajillion選項。選擇您最喜愛的技術或堆棧,無論是frisby on javascript還是vREST

+1

我會編輯我的問題 - 我認爲這裏的主要問題是沒有使用測試查詢打擊REST服務器,它首先想到如何啓動測試REST服務器。 Neo2j似乎有一些非託管擴展的特殊助手,但我無法弄清楚託管。 – 2015-01-26 22:06:56

0

這有點隱藏在文檔,要麼你旋轉了一個CommunityNeoServer與ServerBuilder(其中居住在org.neo4j.app:neo4j-server:test-jar),或使用新的測試線束被記錄在這裏: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()); 
    } 
} 
+2

是的,這與我在第一個問題中鏈接到的文檔是一樣的,但我仍然無法理解託管擴展。 =(我可以很好地運行你的例子,它成功了,但是當我用我的'NeoPlugin.class'託管擴展替換'MyUnmanagedException.class'並且擺脫了'MyUnmanagedExtension'定義時,'newServer()'調用失敗, '「com.sun.jersey.api.container.ContainerException:ResourceConfig實例不包含任何根資源類。」' – 2015-01-29 16:32:55