Lucene在模拟单元测试中的行为

时间:2010-08-02 22:55:02

标签: rhino-mocks lucene.net

现在这很奇怪:

下面的代码在使用RhinoMocks进行NUnit单元测试(断言传递)时工作正常。

这是在代码中创建一个IndexSearcher。 现在,如果我使用Get的模拟版本(交换IndexSearcher的注释赋值),那么现在模拟器返回搜索器,它不会传递断言。

任何人都可以找出原因吗? (NUnit 2.5.2 - RhinoMocks 3.6 - Lucene 2.9.2)

    [Test]
    public void Test()
    {

        ISearcherManager searcherManager = _repository.StrictMock<ISearcherManager>();
        Directory directory = new RAMDirectory();
        IndexWriter writer = new IndexWriter(directory, new StandardAnalyzer(), true);

        searcherManager.Expect(item => item.Get()).Return(new IndexSearcher(writer.GetReader())).Repeat.AtLeastOnce();

        _repository.ReplayAll();

        //searcherManager.Get();

        Document doc = new Document();
        doc.Add(new Field("F", "hello you", Field.Store.YES, Field.Index.ANALYZED));
        writer.AddDocument(doc);

        IndexSearcher searcher = searcherManager.Get();
        //IndexSearcher searcher = new IndexSearcher(writer.GetReader());
        QueryParser parser = new QueryParser("F", new StandardAnalyzer());
        Query q = parser.Parse("hello");
        TopDocs hits = searcher.Search(q, 2);

        Assert.AreEqual(1, hits.totalHits);
    }

1 个答案:

答案 0 :(得分:1)

我对Lucene并不熟悉,但我看到的唯一区别是,通过Expect调用,您在创建IndexSearcher 之前将文档添加到编写器中。在注释掉的代码中,在将文档添加到writer后, 发生了IndexSearcher的创建。这是一个重要的区别吗?