我试图在单元测试中测试server plugin。我已经尽力将单元测试设置为与this project相同。
我的代码问题在于PersistenceContext类创建的InProcessServer。 InProcessServer从7474的第一个端口启动,因此对于我的测试,创建了几个InProcessServers,我想是因为新测试在前一个测试的端口关闭之前运行了吗?
换句话说,在测试执行期间,我会发现进程服务器在我的浏览器中打开localhost:7474,localhost:7475,localhost,7476等等......
当然,这意味着在测试服务器插件时,在测试执行期间,我不知道我将要测试哪个端口,或者我将要访问哪个数据库。如果我单独运行我的服务器插件集成测试,它们运行正常。
我的问题是:
1)我是否首先理解了这一切?
2)如果我不能提前指定端口以及服务器插件,我如何测试服务器插件作为更大集成测试的一部分?有没有一种干净的方法可以找到当前用于运行时测试的服务器端口?
答案 0 :(得分:0)
InProcessServer
不公开单独的端口号,但它确实公开了包含端口号的完整URL。这始终是' http://localhost:xxxx'的形式。如果出于某种原因需要单独使用,可以相当容易地从中提取端口号。
答案 1 :(得分:0)
使用服务器扩展测试时,此提示可能有用:
在这里复制它的建议:
要测试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));
}
未经测试,但应该可以使用。