2017-02-09 26 views
0

我正試圖在neo4j 3.1中測試用戶定義的函數。所以我寫了這一點:內部開發的用戶定義函數獲取「未知函數」

public class Udf 
{ 
    @Context 
    public GraphDatabaseService db; 

    @Context 
    public Log log; 

    @UserFunction("test.id") 
    public Long id(@Name("node") Node node) 
    { 
     return node.getId(); 
    } 
} 

和測試功能是這樣的:

public class UdfTest 
{ 
    @Rule 
    public Neo4jRule neo4j = new Neo4jRule() 
     .withProcedure(Udf.class); 

    @Test 
    public void shouldBeAbleToExtractIdProperty() throws Throwable 
    { 
     try (Driver driver = GraphDatabase.driver(neo4j.boltURI() , Config.build().withEncryptionLevel(Config.EncryptionLevel.NONE).toConfig())) 
     { 
      Session session = driver.session(); 

      long nodeId = session.run("CREATE (p) RETURN test.id(p)") 
        .single() 
        .get(0).asLong(); 

      assertEquals(nodeId, 0); 
     } 
    } 
} 

當我運行測試系統提示:

org.neo4j.driver.v1.exceptions.ClientException: Unknown function 'test.id' (line 1, column 19 (offset: 18)) 
"CREATE (p) RETURN test.id(p)" 
       ^

當我改變@UserFunction@Procedure和一堆其他的變化,我可以使用CALL .. YIELD子句調用完全相同的方法。

有人可以告訴我我做錯了什麼嗎?

回答

1

您在測試中使用withProdcedure方法代替withFunction方法Neo4jRule。將該行更改爲:

@Rule 
public Neo4jRule neo4j = new Neo4jRule() 
    .withFunction(Udf.class); 
相關問題