2012-03-24 3 views
2

Я хотел бы сделать некоторые модульные тесты на основе lucene, но, честно говоря, я понятия не имею, как это сделать. Я не могу показаться, чтобы выяснить самые основные задачи, такие как:Lucene Unit Tests

  1. Настройка макета каталога с MockDirectoryWrapper
  2. Удлиняя мой JUnit тестовый класс с LuceneTestCase не позволяет какой-либо из моих тестов, чтобы запустить
  3. Я хочу, чтобы имитировать поврежденные ошибки файлов, ошибки при блокировке и т. Д., Но я смущен, как использовать MockDirectoryWrapper для выполнения подобных действий.

Ресурс с некоторыми учебниками или примерами будет замечательным. Google, похоже, не находит ничего, связанного с модульным тестированием 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:

De висит от 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

+0

да, возможно, это так. Я думаю, что в следующей версии lucene мы будем поддерживать 4.10 ... проблема в том, что в нашем базовом тестовом классе есть небольшая машина состояний, которая обеспечивает любые вызовы setUp() super.setUp() и любые вызовы tearDown() super.tearDown() и junit 4.8+ меняет вещи таким образом, что у слушателя мы получаем события, которые он не делал до ... подробнее здесь: https://issues.apache.org/jira/browse/LUCENE-3762 –