2012-03-24 35 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