По всей стране такая странная вибрация, Люди в движении, Есть целое поколение с новым объяснением, Люди в движении, люди в движении (Сан-Франциско — Скотт МакКензи)
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. лучше