SDN4 - neo4j服务器插件的集成测试

时间:2015-11-10 02:14:53

标签: neo4j spring-data-neo4j-4

我试图在单元测试中测试server plugin。我已经尽力将单元测试设置为与this project相同。

我的代码问题在于PersistenceContext类创建的InProcessServer。 InProcessServer从7474的第一个端口启动,因此对于我的测试,创建了几个InProcessServers,我想是因为新测试在前一个测试的端口关闭之前运行了吗?

换句话说,在测试执行期间,我会发现进程服务器在我的浏览器中打开localhost:7474,localhost:7475,localhost,7476等等......

当然,这意味着在测试服务器插件时,在测试执行期间,我不知道我将要测试哪个端口,或者我将要访问哪个数据库。如果我单独运行我的服务器插件集成测试,它们运行正常。

我的问题是:

1)我是否首先理解了这一切?

2)如果我不能提前指定端口以及服务器插件,我如何测试服务器插件作为更大集成测试的一部分?有没有一种干净的方法可以找到当前用于运行时测试的服务器端口?

3 个答案:

答案 0 :(得分:0)

InProcessServer不公开单独的端口号,但它确实公开了包含端口号的完整URL。这始终是' http://localhost:xxxx'的形式。如果出于某种原因需要单独使用,可以相当容易地从中提取端口号。

答案 1 :(得分:0)

使用服务器扩展测试时,此提示可能有用:

https://jira.spring.io/browse/DATAGRAPH-656?focusedCommentId=117218&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-117218

在这里复制它的建议:

要测试Neo4jExtension,您需要创建自己的TestServer和InProcessServer,以便连接扩展。像这样的东西: public Neo4jTestServer(){

    try {
        ServerControls controls = TestServerBuilders.newInProcessBuilder()
                .withExtension("/mypath", "org.mypackage")
                .withConfig("dbms.security.auth_enabled", "false")
                .newServer();

        initialise(controls); //Or try extracting the uri, port from controls this point

    } catch (Exception e) {
        throw new RuntimeException("Error starting in-process server",e);
    }

}

答案 2 :(得分:0)

如果您想要完全控制InProcessServer的配置,那就不难自行推出。这将完成这项工作:

public class MyInProcessServer implements Neo4jServer {

  private TestServer testServer;

  public InProcessServer(TestServer testServer)  {
    this.testServer = testServer;
  }

  public String url() {
    return this.testServer.url();
  }

  @Override
  public String username() {
    return "neo4j";
  }

  @Override
  public String password() {
    return "password";
  }

  public GraphDatabaseService database() {
    return testServer.getGraphDatabaseService();
  }
}

您显然需要相应地设置Spring配置:

@Bean
@Override
public Neo4jServer neo4jServer() {
    return new MyInProcessServer(new TestServer(6666));
}

未经测试,但应该可以使用。