代码之家  ›  专栏  ›  技术社区  ›  Khash

模拟单元测试中的Lucene行为

  •  1
  • Khash  · 技术社区  · 15 年前

    这很奇怪:

    下面的代码在使用Rhinomocks的nunit单元测试(断言通过)中运行良好。

    这将在代码中创建索引搜索器。 现在,如果我使用GET的模拟版本(交换indexsearcher的注释分配),那么现在,模拟返回搜索者,它不会传递断言。

    有人能找出原因吗?(努尼特2.5.2-犀牛3.6-露西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 回复  |  直到 15 年前
        1
  •  1
  •   PatrickSteele    15 年前

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