Java 如何使用JUnit测试Neo4j服务器的非托管扩展

Java 如何使用JUnit测试Neo4j服务器的非托管扩展,java,http,junit,neo4j,Java,Http,Junit,Neo4j,我正试图为Neo4j项目开发一些测试文件。我发现Neo4j提供了junitrule(),并尝试将其用于测试。但是,它不起管理者的作用 我的代码与Neo4j帮助页面中的代码完全相同: @Rule public Neo4jRule neo4j = new Neo4jRule() .withFixture( "CREATE (admin:Admin)" ) .withFixture( new Function<GraphDatabaseService, Void>()

我正试图为Neo4j项目开发一些测试文件。我发现Neo4j提供了junitrule(),并尝试将其用于测试。但是,它不起管理者的作用

我的代码与Neo4j帮助页面中的代码完全相同:

@Rule
public Neo4jRule neo4j = new Neo4jRule()
    .withFixture( "CREATE (admin:Admin)" )
    .withFixture( new Function<GraphDatabaseService, Void>()
    {
        @Override
        public Void apply( GraphDatabaseService graphDatabaseService ) throws RuntimeException
        {
            try (Transaction tx = graphDatabaseService.beginTx())
            {
                graphDatabaseService.createNode( DynamicLabel.label( "Admin" ));
                tx.success();
            }
            return null;
        }
    } );

@Test
public void shouldWorkWithServer() throws Exception
{
     // Given
    URI serverURI = neo4j.httpURI();

    // When I access the server
    HTTP.Response response = HTTP.GET( serverURI.toString() );

    // Then it should reply
    assertEquals(200, response.status());
}
结果是一样的。我还尝试改用TestServerBuilders,并使用默认值“neo4j:neo4j”生成Http身份验证头,但再次出现相同的错误。如果没有创建服务器,我可以通过getGraphDatabaseService()访问它并查看节点,但无法通过HTTP访问它


Neo4j版本是3.2.1,JUnit版本是4.11如果使用Maven,不要忘记声明依赖项的顺序很重要。因此,您应该在“测试”依赖项之后声明“提供的”依赖项,以便在提供的依赖项之前使用测试库的实现。这是所有JEE相关图书馆的良好实践


在您的情况下,请确保在org.neo4j.test:neo4j线束:2.3.1之后声明javax.ws.rs:javax.ws.rsapi:2.0。如果使用Maven,请不要忘记声明依赖项的顺序很重要。因此,您应该在“测试”依赖项之后声明“提供的”依赖项,以便在提供的依赖项之前使用测试库的实现。这是所有JEE相关图书馆的良好实践


在您的例子中,确保在org.neo4j.test:neo4j线束:2.3.1之后声明javax.ws.rs:javax.ws.rsapi:2.0,因为您得到的是500,所以应该有一个堆栈跟踪。我的直觉告诉我,你缺少带有分类器测试的
neo4jio
jar,。我已经发现了问题所在。Neo4j手册推荐的javax.ws.rs:javax.ws.rsapi:2.0人工制品实际上与org.Neo4j相冲突。我已经删除了rs库,现在一切都神奇地工作了。@Dmitry谢谢你的提醒!!谢谢你!在使用maven时,还可以将jaxRS依赖项声明为最后一个依赖项。它也会有同样的效果effect@Rwanou请添加您的评论作为答案,以供将来参考。因为您得到的是500分,所以应该有一个stacktrace。我的直觉告诉我,你缺少带有分类器测试的
neo4jio
jar,。我已经发现了问题所在。Neo4j手册推荐的javax.ws.rs:javax.ws.rsapi:2.0人工制品实际上与org.Neo4j相冲突。我已经删除了rs库,现在一切都神奇地工作了。@Dmitry谢谢你的提醒!!谢谢你!在使用maven时,还可以将jaxRS依赖项声明为最后一个依赖项。它也会有同样的效果effect@Rwanou请添加您的评论作为答案,以供将来参考
Failed tests:   shouldWorkWithServer(test.Test): expected:<200> but was:<500>
URI serverURI = neo4j.httpURI().resolve("db/data/");