为内部开发的用户定义函数获取 "unknown function"

Getting "unknown function" for inhouse developed user defined function

我正在尝试在 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 子句调用完全相同的方法。

有人可以告诉我我做错了什么吗?

您在测试中对 Neo4jRule 使用 withProdcedure 方法而不是 withFunction 方法。将该行更改为:

@Rule
public Neo4jRule neo4j = new Neo4jRule()
    .withFunction(Udf.class);