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 лучше.
Мы продолжаем учиться,
Алекс.