我试图在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
子句调用完全相同的方法。
有人可以告诉我我做错了吗?
答案 0 :(得分:1)
您在测试中withProdcedure
使用withFunction
方法而不是Neo4jRule
方法。将该行更改为:
@Rule
public Neo4jRule neo4j = new Neo4jRule()
.withFunction(Udf.class);