Каков наилучший способ написания тестовых случаев при работе с в конечном итоге непротиворечивым хранилищем данных, таким как MongoDB?
Моя текущая настройка - Mongodb с настройкой Master / Slave / Slave с 3 узлами, для slave-ok установлено значение true. Это означает, что главный узел используется только для записи, а два подчиненных узла - только для чтения.
Время, необходимое для согласованности данных на ведомых устройствах, относительно мало и зависит от операции и размера данных. Например, ~ 3 мс для операций удаления и ~ 200 мс для пакетной вставки из 1000 объектов.
Моя цель - протестировать операции на моем Дао. Они могут быть простыми, такими как getById, delete, insert, или сложными, как findByExample. Мне нужно убедиться, что они работают правильно, и в конечном итоге допустимо некоторое ограничение времени ожидания.
Это то, что у меня есть, чтобы проверить операцию удаления, например:
@Test
public void deleteTest() throws InstantiationException,
IllegalAccessException {
MyObject obj = new MyObject();
obj.setName("test object");
obj.save(obj);
MyObject found = dao.findById(obj.getId());
logger.info ("before: " + found);
Assert.assertEquals(obj, found);
dao.delete(obj.getId());
MyObject deleted = null;
long start = System.nanoTime();
do {
//TBD: need to add escape condition/timeout, else may be infinite loop....
deleted = dao.findById(obj.getId());
logger.info ("While: " + deleted);
} while (deleted!=null);
logger.info("It took " + ((System.nanoTime()-start)/1000000.00) + " ms for delete to be consistent");
Assert.assertEquals(null, d1);
}