2017-02-21 90 views
0

我已經爲使用Graphaware軟件包的Neo4j開發了一個模塊。作爲我的模塊的一部分,我想確保數據庫中存在一些索引和/或約束。爲此,我用BaseTxDrivenModule.initialize方法來運行一對夫婦的Cypher聲明:由於CREATE INDEX和CREATE CONSTRAINT而無法運行單元測試

@Override 
public void initialize(GraphDatabaseService database) 
{ 
    database.execute("CREATE CONSTRAINT ON (n:`Label`) ASSERT n.`id` IS UNIQUE;"); 
    database.execute("CREATE INDEX ON n:`Label2`(`id`) IS UNIQUE;"); 
} 

這些語句在生產中成功運行,當我的Neo4j的服務器實例部署模塊。但是當我想要運行單元測試時,作爲構建過程的一部分,執行會掛起並且永遠不會結束。當我省略initialize方法時,它會繼續運行而不會出現任何錯誤。

最糟糕的部分是我必須構建如下的包:mvn package -Dmaven.test.skip=true或者它不會構建任何東西。

所以我的問題是,爲什麼?我該如何解決這個問題?

下面是一個示例演示項目的問題:

https://github.com/ziadloo/test_neo4j_module

只是克隆並運行mvn package,你會看到測試寫不完。

+0

你能提供一個有問題的測試項目嗎? –

+0

@ChristopheWillemsen我 – Mehran

+0

感謝更新的問題,克隆,調整和回答 –

回答

1

沒有該運行系統在測試期間開始的保證,你必須通過調用waitUntilStarted方法斷言它。

@Before 
    public void setUp() { 
     database = new TestGraphDatabaseFactory() 
      .newImpermanentDatabaseBuilder() 
      .loadPropertiesFromFile(this.getClass().getClassLoader().getResource("neo4j-module.conf").getPath()) 
      .newGraphDatabase(); 

     getRuntime(database).waitUntilStarted(); 

     registerShutdownHook(database); 
    } 

我建議你看一下neo4j-uuid模塊中的一些測試用例,例如。

+0

謝謝你,我會考慮的第一機會,我得到。 – Mehran