2012-03-24 85 views
2

我想在lucene框架上做一些單元測試,但老實說我不知道​​該怎麼去做。我似乎無法弄清楚最基本的任務,如:Lucene單元測試

  1. 與MockDirectoryWrapper
  2. 設置一個模擬目錄擴展與LuceneTestCase我的JUnit測試類不允許任何我的測試運行
  3. 我想模擬損壞的文件錯誤,lockeddirectory錯誤等,但我很困惑如何使用MockDirectoryWrapper做這些事情。

有一些教程或示例的資源會很好。谷歌似乎沒有發現與Lucene單元測試有關的任何內容,儘管Lucene的網站有很好的文檔,但是它們沒有提供任何教程。

通常我使用一個RAMDirectory並將其注入到我的lucene類中,以對基本函數執行單元測試,例如向索引添加文檔或刪除文檔等,這很好,但它不允許我測試如上面列出的錯誤。

我可以創建一個物理目錄測試文件,創建測試目錄,然後刪除其中的一個文件,以實質上損壞它,但有沒有辦法做到這一點作爲一個模擬,而實際上不必在磁盤上創建文件?

回答

4
  1. 一個簡單的例子測試 https://github.com/apache/lucene-solr/blob/master/lucene/core/src/test/org/apache/lucene/TestDemo.java

  2. 我不知道你說「測試不跑」的意思:但它絕對至關重要您使用記錄與工作的JUnit的確切版本的發佈:

例如,對於3.5:

德暫時擱置JUnit的4.7.x(不4.6.X,不4.8.x)

http://svn.apache.org/repos/asf/lucene/dev/branches/lucene_solr_3_5/lucene/README.txt

的Junit有時會中斷向後兼容性,它不是我們的錯。只要更高級的東西,如模擬錯誤,你將不得不看看代碼或在Lucene中看類似的測試。例如。假硬盤錯誤,只要看看TestIndexWriterOnDiskFull看看它是如何做到的。

+0

它必須是給我的問題的jUnit的版本號。我從來沒有想到這一點。我使用的是eclipse,它附帶4.8。再次感謝您的幫助。這個樣本測試真的幫了很大忙。 – ryandlf 2012-03-25 14:27:46

+0

是的,這可能是它。我認爲在下一個版本的lucene中我們將支持4.10 ...問題是我們在基類測試類中有一個小狀態機,它確保setUp()調用super.setUp()和任何tearDown()調用super.tearDown ()和junit 4.8+以這種方式改變了事情,我們收到的事件聽衆已經收到它以前沒有的事件...更多信息請訪問:https://issues.apache.org/jira/browse/LUCENE-3762 – 2012-03-25 21:15:19