如何使用neo4j-in-memory-server编写单元测试

时间:2014-05-29 20:20:36

标签: neo4j

我已经编写了一个web服务,现在想为它编写一些单元测试。 我偶然发现了Michael Hunger's in memory server

由于文档稀疏,我很难设置一个单元测试。 我克隆了项目,将其包含在我的工作区中,并将其作为依赖项添加到我的项目中。

为了测试我的Web服务,我编写了这个方法来创建内存中的neo4j服务器:

@BeforeClass
public static void setupInMemoryServer()
{
    CommunityBootstrapper s = new CommunityBootstrapper();
    int status = -1;
    try
    {
        status = s.start();
    }
    catch(Exception e)
    {
        System.out.println("could not start server");
        e.printStackTrace();
        System.out.println(e.getMessage());
        System.out.println(e.getCause());
        System.out.println(e.getLocalizedMessage());
    }
    System.out.println(hostAvailabilityCheck());
    System.out.println("status = "+status);


}
public static boolean hostAvailabilityCheck() { 
        try (Socket s = new Socket("127.0.0.1", 7474)) {
            return true;
        } catch (IOException ex) {
            System.out.println ("Neo server not online");
        }
        return false;
    }

当我运行此代码时,我得到以下输出:

  

Mai 29,2014 10:13:17 PM org.neo4j.server.logging.Logger log SEVERE:无法升级数据库Mai 29,2014 10:13:17 PM   org.neo4j.server.logging.Logger日志严重:   org.neo4j.server.ServerStartupException:启动Neo4j服务器失败:   由于预检任务[class]启动失败   org.neo4j.server.preflight.PerformUpgradeIfNecessary]:无法   升级数据库   org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:218)     在org.neo4j.server.Bootstrapper.start(Bootstrapper.java:87)at   org.neo4j.server.Bootstrapper.start(Bootstrapper.java:74)at at   com.youtube.rest.status.test.CreateUserTest.setupInMemoryServer(CreateUserTest.java:26)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)at   sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)at   java.lang.reflect.Method.invoke(未知来源)at   org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:47)     在   org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)     在   org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)     在   org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)     在   org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)     在org.junit.runners.ParentRunner.run(ParentRunner.java:309)at   org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)     在   org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)     在   org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)     在   org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)     在   org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)     在   org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)   引起:org.neo4j.server.preflight.PreflightFailedException:   由于预检任务[class]启动失败   org.neo4j.server.preflight.PerformUpgradeIfNecessary]:无法   升级数据库   org.neo4j.server.AbstractNeoServer.runPreflightTasks(AbstractNeoServer.java:335)     在   org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:152)     ......还有19个

     

Mai 29,2014 10:13:17 PM org.neo4j.server.logging.Logger log SEVERE:   无法在端口[7474]

上启动Neo Server      

     

status = 1

     

Mai 29,2014   10:13:17 PM org.neo4j.server.logging.Logger日志警告:失败   干净地关闭数据库。 Mai 29,2014 10:13:17 PM   org.neo4j.server.logging.Logger log INFO:成功关闭Neo   端口[7474]上的服务器,数据库[未知位置]

我不知道为什么会发生这种情况,因为服务器内置在内存中,所有内容都应该(暂时)创建。我既不明白,如何发生数据库更新冲突,也不知道如何解决冲突。

1 个答案:

答案 0 :(得分:2)

基于堆栈跟踪中的“无法升级数据库”字符串,看起来您的数据库需要升级,但升级无法自动完成。您可能需要进行“显式升级”,如this page所述。