По всей стране такая странная вибрация, Люди в движении, Есть целое поколение с новым объяснением, Люди в движении, люди в движении (Сан-Франциско — Скотт МакКензи)
NoSQLUnit — это расширение JUnit для упрощения написания модульных и интеграционных тестов систем, использующих серверную часть NoSQL . Посетите официальную страницу для получения дополнительной информации.
В
версии 0.4.0 поддерживается одна новая
система NoSQL —
Cassandra .
Cassandra — это
модель данных BigTable, работающая в
инфраструктуре, подобной Amazon Dynamo .
модель данных BigTable, работающая в
инфраструктуре, подобной Amazon Dynamo .
Поскольку все базы данных поддерживаются
NoSQLUnit , для написания тестов Cassandra предусмотрено два набора правил
:
Первый набор
правил JUnit предназначен для управления жизненным циклом базы данных; в основном запуск и остановка
экземпляра Кассандры .
- Встроенный: com.lordofthejars.nosqlunit.cassandra.EmbeddedCassandra
- Управляется: com.lordofthejars.nosqlunit.cassandra.ManagedCassandra
В зависимости от типа выполняемых вами тестов (модульное тестирование, интеграционное тестирование, тесты развертывания и т. Д.) Вам потребуется
встроенный ,
управляемый или
удаленный подход. Обратите внимание, что пока я не реализовал
подход In-Memory, потому что в памяти нет
экземпляра Cassandra , но лучше будет встроенная стратегия для модульных тестов.
Второй набор правил — это те, кто отвечает за поддержание базы данных в известном состоянии;
- Управление NoSQLUnit : com.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. лучше
