Статьи

Выпущена NoSQLUnit 0.4.0

 
 


По всей стране такая странная вибрация, Люди в движении, Есть целое поколение с новым объяснением, Люди в движении, люди в движении (Сан-Франциско — Скотт МакКензи)

 

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


В
версии 0.4.0 поддерживается одна новая
система
NoSQL
Cassandra .
Cassandra — это
модель данных
BigTable, работающая в
инфраструктуре, подобной
Amazon Dynamo .

Поскольку все базы данных поддерживаются
NoSQLUnit , для написания тестов Cassandra предусмотрено два набора правил
:

Первый набор
правил JUnit предназначен для управления жизненным циклом базы данных; в основном запуск и остановка
экземпляра
Кассандры .
  • Встроенный:  com.lordofthejars.nosqlunit.cassandra.EmbeddedCassandra
  • Управляется:  com.lordofthejars.nosqlunit.cassandra.ManagedCassandra

В зависимости от типа выполняемых вами тестов (модульное тестирование, интеграционное тестирование, тесты развертывания и т. Д.) Вам потребуется
встроенный ,
управляемый или
удаленный подход. Обратите внимание, что пока я не реализовал
подход
In-Memory, потому что в памяти нет
  экземпляра
Cassandra , но лучше будет встроенная стратегия для модульных тестов. 

Второй набор правил — это те, кто отвечает за поддержание базы данных в известном состоянии;
  • Управление NoSQLUnitcom.lordofthejars.nosqlunit.cassandra.CassandraRule

И, наконец, формат файла набора данных по умолчанию в
Cassandra
json . Для того, чтобы сделать совместимый
NoSQLUnit с
Cassandra-Unit формат файла,
DataLoader из
Cassandra-Unit проекта используется, так же
JSON используется формат файла.

Мы будем использовать очень простой пример, используемый в
руководстве
Cassandra, в качестве примера того, как писать модульные тесты для систем, которые используют
базу данных
Cassandra в качестве бэкэнда.

Прежде всего, набор данных, используемый для поддержания
Кассандры в известном состоянии:
 
{
    "name" : "persons",
    "columnFamilies" : [{
        "name" : "personFamilyName",
"keyType" : "UTF8Type",
"defaultColumnValueType" : "UTF8Type",
"comparatorType" : "UTF8Type",
        "rows" : [{
            "key" : "john",
            "columns" : [{
                "name" : "age",
                "value" : "22"
            },
            {
                "name" : "car",
                "value" : "toyota"
            }]
        },
        {
            "key" : "mary",
            "columns" : [{
                "name" : "age",
                "value" : "33"
            },
            {
                "name" : "car",
                "value" : "ford"
            }]
        }]
    }]
}


Наконец контрольный пример:
import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.is;

import static com.lordofthejars.nosqlunit.cassandra.EmbeddedCassandra.EmbeddedCassandraRuleBuilder.newEmbeddedCassandraRule;
import static com.lordofthejars.nosqlunit.cassandra.EmbeddedCassandraConfigurationBuilder.newEmbeddedCassandraConfiguration;

import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;

import com.lordofthejars.nosqlunit.annotation.UsingDataSet;
import com.lordofthejars.nosqlunit.cassandra.CassandraRule;
import com.lordofthejars.nosqlunit.cassandra.EmbeddedCassandra;
import com.lordofthejars.nosqlunit.core.LoadStrategyEnum;

public class WhenPersonWantsToKnowItsCar {

@ClassRule
public static EmbeddedCassandra embeddedCassandraRule = newEmbeddedCassandraRule().build();

@Rule
public CassandraRule cassandraRule = new CassandraRule(newEmbeddedCassandraConfiguration().clusterName("Test Cluster").build());


@Test
@UsingDataSet(locations="persons.json", loadStrategy=LoadStrategyEnum.CLEAN_INSERT)
public void car_should_be_returned() {

PersonManager personManager = new PersonManager("Test Cluster", "persons", "localhost:9171");
String car = personManager.getCarByPersonName("mary");

assertThat(car, is("ford"));

}

}


Следующая версия
(0.4.1) будет содержать некоторые внутренние изменения, но не будет поддерживать новый движок. И после этих изменений будут поддерживаться новые движки. Более того, я решил открыть опрос, чтобы выяснить, какой движок вы бы хотели увидеть в
выпуске
0.4.2 :

Посетите опрос.

Оставайтесь на связи с проектом, и, конечно, я открыт для любых идей, которые, по вашему мнению, могут сделать
NoSQLUnit. лучше