开发者

Lucene behaviour in mocked unit tests

Now this is just strange:

The code as it is below works fine in a NUnit unit test with RhinoMocks (the assert passes).

This is creating an IndexSearcher in the code. Now if I use the mocked version of Get (swap the commented assignment of IndexSearcher) so now the searcher is returned by the mock, it doesn't pass the assertion.

Can anyone figure out why that is? (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);

开发者_如何学C        Assert.AreEqual(1, hits.totalHits);
    }


I'm not familiar with Lucene, but the only difference I see is that via the Expect call, you are creating your IndexSearcher before adding the document to the writer. In the code that is commented out, the creation of the IndexSearcher is happening after you add the document to the writer. Is that an important distinction?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜