2016-06-04 5 views
1

Я добавляю драйвер Neo4j Болт к моему применению только после http://neo4j.com/developer/java/:Neo4j: блок тестирование драйвера затвора правильно

import org.neo4j.driver.v1.*; 

Driver driver = GraphDatabase.driver("bolt://localhost", AuthTokens.basic("neo4j", "neo4j")); 

Session session = driver.session(); 
session.run("CREATE (a:Person {name:'Arthur', title:'King'})"); 

StatementResult result = session.run("MATCH (a:Person) WHERE a.name = 'Arthur' RETURN a.name AS name, a.title AS title"); 

while (result.hasNext()) 

{ 
    Record record = result.next(); 
    System.out.println(record.get("title").asString() + " " + record.get("name").asString()); 
} 
session.close(); 
driver.close(); 

Однако, всегда с официальным модульным тестирования documentation производятся с использованием:

GraphDatabaseService db = new TestGraphDatabaseFactory() 
      .newImpermanentDatabaseBuilder() 

Так что, если я хочу каким-то образом проверить код выше, я должен заменить GraphDatabase.driver("bolt://localhost",...) на тест GraphDatabaseService. Как я могу это сделать? Насколько я вижу, я не могу извлечь какой-либо вид in-memory driver.

ответ

1

Neo4j JDBC имеет класс под названием Neo4jBoltRule для модульного тестирования. Это правило junit, запускающее/останавливающее непостоянную базу данных вместе с некоторой конфигурацией для запуска болта.

Класс правил использует динамическое назначение порта, чтобы предотвратить сбой теста из-за параллельной работы нескольких тестов (подумайте о своей инфраструктуре CI).

Пример модульного тестирования с использованием этого класса правил доступна на https://github.com/neo4j-contrib/neo4j-jdbc/blob/master/neo4j-jdbc-bolt/src/test/java/org/neo4j/jdbc/bolt/SampleIT.java

+0

Спасибо! Он выглядит тем, что я искал. Тем не менее, есть ли там какой-нибудь рабочий репозиторий maven? Или единственный способ добавить пакет neo4j-jdbc - включить банку? – Randomize

+0

Я обнаружил, что до 2-го этапа: «it.larus-ba»% «neo4j-jdbc»% «3.0-M02». Для третьей вехи они перемещают groupId в «org.neo4j». – Randomize

+0

Мне сейчас интересно, что такое минимальный список зависимостей для использования драйвера neo4j-bolt :) – Randomize

0

простой способ в настоящее время является тянуть neo4j-harness, и использовать их встроенные Neo4jRule следующим образом:

import static org.neo4j.graphdb.factory.GraphDatabaseSettings.boltConnector; 
// [...] 
@Rule public Neo4jRule graphDb = new Neo4jRule() 
     .withConfig(boltConnector("0").address, "localhost:" + findFreePort()); 

Где findFreePort реализация может быть такой простой, как:

private static int findFreePort() { 
    try (ServerSocket socket = new ServerSocket(0)) { 
     return socket.getLocalPort(); 
    } catch (IOException e) { 
     throw new RuntimeException(e.getMessage(), e); 
    } 
} 

Как Javadoc из ServerSocket:

Номер порта 0 означает, что номер порта автоматически назначается, как правило, из эфемерного диапазона портов. Затем этот номер порта можно получить, вызвав getLocalPort.

Кроме того, розетка закрыта до того, как значение порта возвращается, поэтому есть большие шансы, что возвращенный порт по-прежнему будет доступен по возвращении (окно возможностей для порта, которое будет выделено снова между ними, вычисление размера окна остается в качестве упражнения для читателя).

Et voilà!

Смежные вопросы