Статьи

Выпущена NoSQLUnit 0.3.2


NoSQLUnit
— это
расширение JUnit
для упрощения написания модульных и интеграционных тестов систем, использующих
серверную часть NoSQL
. Посетите
официальную страницу
для получения дополнительной информации.

В
версии 0.3.2 поддерживается одна новая
система
NoSQL
Neo4j .
Neo4j — это высокопроизводительная
графическая база данных
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 лучше.

Мы продолжаем учиться,

Алекс.