在處理最終一致的數據存儲(如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