Spring data mongodb Entity有一個字段設置了惟一索引spring
@Indexed(unique=true) private String uid;
測試不能添加uid重複的記錄mongodb
/** * 測試插入UID重複記錄失敗 */ MyCardDO myCardDO1 = new MyCardDO(); myCardDO1.setUid("1"); myCardService.add(myCardDO1); try { MyCardDO myCardDO2 = new MyCardDO(); myCardDO2.setUid("1"); myCardService.add(myCardDO2); Assert.fail(); } catch (DuplicateKeyException e) { assertTrue(e.getMessage().contains("E11000 duplicate key error collection: opportunity-test.pro_mycard index: uid dup key: { : \"1\" }")); }
單獨執行這個測試方法沒有問題 若是執行整個測試類的話 這個測試方法就會通不過緩存
會在每一個測試方法結束後 刪除collectionapp
@After public void tearDown() { mongoTemplate.dropCollection(MyCardDO.class); }
而Spring data mongodb 只會執行一次createIndex
操做 一旦已經執行過了 以後就不會再執行了
因而以後的測試方法執行的時候 collection是沒有索引存在的 故會報錯測試
一旦org.springframework.data.mapping.context.AbstractMappingContext#persistentEntities
已經緩存了該Entity 那麼以後就不會執行createIndex
操做了ui
org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator#createIndex
@After public void tearDown() { mongoTemplate.remove(new Query(), MyCardDO.class); } @AfterClass public static void finalClean() { mongoTemplate.dropCollection(MyCardDO.class); }
每一個方法執行完後 只是清空collection中的數據 等整個測試類執行完後纔去dropcode