
NoSQLUnit
— это
расширение JUnit
для упрощения написания модульных и интеграционных тестов систем, использующих
серверную часть NoSQL
. Посетите
официальную страницу
для получения дополнительной информации.
В
версии 0.3.2 поддерживается одна новая
система NoSQL —
Neo4j .
Neo4j — это высокопроизводительная
графическая база данных NoSQL со всеми функциями зрелой и надежной базы данных.
графическая база данных NoSQL со всеми функциями зрелой и надежной базы данных.
Поскольку все базы данных поддерживаются
NoSQLUnit , для написания тестов Neo4j предусмотрено два набора правил
:
Первый набор
правил JUnit предназначен для управления жизненным циклом базы данных; в основном запуск и остановка
Neo4j .
- Встроенный: com.lordofthejars.nosqlunit.neo4j.EmbeddedNeo4j
- Управляемая упаковка: com.lordofthejars.nosqlunit.neo4j.ManagedWrappingNeoServer
- Управляется: com.lordofthejars.nosqlunit.neo4j.ManagedNeoServer
В зависимости от типа выполняемого теста (модульный тест, интеграционный тест, тест развертывания и т. Д.) Вам потребуется
встроенный подход,
управляемый подход или
удаленный подход. Обратите внимание, что в настоящее время не реализована
база данных Neo4j
в памяти , но
лучше будет встроенная стратегия для модульных тестов. Как
знают разработчики Neo4j , вы можете запустить удаленный
сервер Neo4j , вызвав сценарии запуска / остановки (
управляемый способ ) или используя встроенную оболочку базы данных сервером (
управляемый способ обертывания ), оба они поддерживаются
NoSQLUnit .
Второй набор правил — это те, кто отвечает за поддержание базы данных в известном состоянии;
- Управление NoSQLUnit : com.lordofthejars.nosqlunit.neo4j.Neo4jRule
И, наконец, формат файла набора данных по умолчанию в
Neo4j — это
GraphML .
GraphML — это всеобъемлющий и простой в использовании формат файлов для графиков.
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns">
<key id="attr1" for="edge" attr.name="attr1" attr.type="float"/>
<key id="attr2" for="node" attr.name="attr2" attr.type="string"/>
<graph id="G" edgedefault="directed">
<node id="1">
<data key="attr2">value1</data>
</node>
<node id="2">
<data key="attr2">value2</data>
</node>
<edge id="7" source="1" target="2" label="label1">
<data key="attr1">float</data>
</edge>
</graph>
</graphml>
Мы будем использовать пример поиска друзей Neo как пример того, как писать модульные тесты для систем, которые используют
базы данных Neo4j в качестве бэкэнда.
Прежде всего, набор данных, используемый для поддержания
Neo4j в известном состоянии
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns
http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
<key id="name" for="node" attr.name="name" attr.type="string"/>
<key id="age" for="edge" attr.name="age" attr.type="int"/>
<graph id="G" edgedefault="directed">
<node id="1">
<data key="name">Thomas Anderson</data>
</node>
<node id="2">
<data key="name">Trinity</data>
</node>
<node id="3">
<data key="name">Morpheus</data>
</node>
<node id="4">
<data key="name">Agent Smith</data>
</node>
<node id="5">
<data key="name">The Architect</data>
</node>
<edge id="1" source="0" target="1" label="NEO_NODE">
</edge>
<edge id="2" source="1" target="2" label="KNOWS">
<data key="age">3</data>
</edge>
<edge id="3" source="1" target="3" label="KNOWS">
<data key="age">5</data>
</edge>
<edge id="4" source="2" target="3" label="KNOWS">
<data key="age">18</data>
</edge>
<edge id="5" source="3" target="4" label="KNOWS">
<data key="age">20</data>
</edge>
<edge id="6" source="4" target="5" label="CODED_BY">
<data key="age">20</data>
</edge>
</graph>
</graphml>
и, наконец, контрольный пример:
public class WhenNeoFriendsAreRequired {
@ClassRule
public static EmbeddedNeo4j embeddedNeo4j = newEmbeddedNeo4jRule().build();
@Rule
public Neo4jRule neo4jRule = new Neo4jRule(newEmbeddedNeoServerConfiguration().build(), this);
@Inject
private GraphDatabaseService graphDatabaseService;
@Test
@UsingDataSet(locations="matrix.xml", loadStrategy=LoadStrategyEnum.CLEAN_INSERT)
public void all_direct_and_inderectly_friends_should_be_counted() {
MatrixManager matrixManager = new MatrixManager(graphDatabaseService);
int countNeoFriends = matrixManager.countNeoFriends();
assertThat(countNeoFriends, is(3));
}
}
Следующий релиз будет поддерживать
Cassandra .
Оставайтесь на связи с проектом и, конечно, я открыт для любых идей, которые, по вашему мнению, могут сделать
NoSQLUnit лучше.
Мы продолжаем учиться,
Алекс.