2017-02-09 35 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);