2014-10-22 36 views
1

我希望能夠在集成測試執行之間清除所有數據的數據庫。我的第一個想法是使用@TestExecutionListeners批註註冊的org.springframework.test.context.support.AbstractTestExecutionListener 在測試之間執行必要的清理。獲取Spring數據MongoDB重新創建索引

afterTestMethod(TestContext testContext)方法中,我嘗試從測試上下文獲取數據庫並使用com.mongodb.DB.drop()方法。這個工作正常,除了它也破壞了Spring Data在第一次綁定我的託管對象時自動創建的索引。

現在我已經訴諸通過收集名稱迭代和調用remove固定如下這樣:

for (String collectionName : database.getCollectionNames()) { 
     if (collectionIsNotASystemCollection(collectionName) 
      database.getCollection(collectionName).remove(new BasicDBObject()); 

    } 

這工作,達到了預期的結果 - 但它會是不錯的,如果有辦法我可以簡單地刪除數據庫,然後讓Spring Data「重新綁定」並執行與創建所有必要索引時所執行的初始化相同的初始化。這感覺更清潔,更安全...

我試着玩org.springframework.data.mongodb.core.mapping.MongoMappingContext,但還沒有設法解決,如果有辦法做我想做的。

任何人都可以提供任何指導?

回答

1

請參閱this ticket以解釋爲什麼它目前正常工作,爲什麼解決此問題會產生比解決問題更多的問題。

假設你正在使用Hibernate,然後觸發一個調用來刪除數據庫,你甚至會夢想假設表和所有的索引都會重新出現嗎?如果刪除MongoDB數據庫/集合,則刪除與其關聯的所有元數據。因此,您需要按照您希望的方式進行設置。

P.S .:我不確定我們是否自己幫忙添加自動索引支持,因爲這當然會觸發您現在擁有的期望:)。如果您有任何建議,可以在沒有我在我的初始評論中列出的缺點的情況下實現這一目標,請隨時對該機票發表評論。