2011-11-09 113 views
0

我有一個基於Spring的系統,使用Hibernate Search 3.4(在Hibernate 3.5.4之上)。集成測試由Spring管理,使用@Transactional註釋。目前,測試數據(要被索引的實體)由Liquibase腳本加載,我們使用它的Spring集成。管理非常不方便。如何管理Hibernate的測試數據搜索集成測試

我的新解決方案是將測試數據定義爲Spring bean,並按名稱將它們連接爲資源。這部分工作。

我試圖讓這些bean在我的測試用例的setUp方法(以及測試方法本身)中持久化並建立索引,但是我失敗了。他們進入數據庫的罰款,但我不能讓他們索引。我試圖在FullTextEntityManager(與flushToIndexes)上調用index(),我試過createIndexer().startAndWait()

我還能做什麼? 或者可能有更好的HS測試選項?

預先感謝您

回答

1

我的新的解決方案是有定義的Spring bean和電線 它們作爲資源的測試數據,按名稱。這部分工作。

聽起來像一個單元測試奇怪的設置。說實話,我不引用你如何做到這一點。

In Search本身內存數據庫(H2)與Lucene RAM目錄一起使用。這種設置的好處是,避免測試之間的依賴性是快速而容易的。

我試圖讓這些bean在我的測試用例(和測試方法本身)中setUp方法 中持久化和索引,但是我失敗了。他們得到 數據庫罰款,但我不能讓他們索引。

如果啓用了自動索引並且在事務中持續存在測試數據,它應該可以工作。與Spring結合的常見錯誤是使用錯誤的事務管理器。 Hibernate Search論壇有很多關於此的論壇,例如這個 - https://forum.hibernate.org/viewtopic.php?f=9&t=998155。由於您沒有給出具體的配置和代碼示例,因此很難提供更具體的建議。

我試過createIndexer()。startAndWait()

,這也是一個不錯的辦法。如果你不想插入這樣一對測試實體,而是一整套數據,我會推薦這種方法。在這種情況下,使用像dbunit這樣的框架來插入測試數據然後手動索引數據是有意義的。 createIndexer()。startAndWait()是正確的工具。將所有這些加載/持久化/索引功能提取到一個通用的測試基類是一種可行的方法。基類也可以負責完成所有的Spring引導。

再次,要給出更具體的反饋,你必須改進你的問題。

+0

感謝您的回答。 –