在处理最终一致的数据存储(如MongoDB)时编写测试用例的最佳做法是什么?最终一致性和测试用例
我目前的设置是Mongodb,它有一个3节点主/从/从设置,slave-ok设置为true。这意味着主节点用于只写,而两个从节点用于只读。
数据在从站上一致的时间相对较短,并且取决于操作和数据大小。例如,对于1000个对象,删除操作的时间约为3毫秒,批量插入的时间约为200毫秒。
我的目标是测试我的道操作。它们可能很简单,比如getById,删除,插入,或者像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);
}
你想测试什么?您的应用程序如何处理“陈旧”数据?或者您的MongoDB安装需要多长时间才能传播更改? – Thilo
我正在测试我的Dao上的操作。它们可能很简单,比如getById,删除,插入,或者像findByExample这样的复杂类。我需要验证它们是否正常工作,最终一致性可以接受。 – ltfishie
在这种情况下,让他们在查询奴隶之前让他们睡在可接受的限度内(如果这样做不必要的时间过长,让他们每秒钟醒来)。 – Thilo