现在这很奇怪:
下面的代码在使用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);
}
答案 0 :(得分:1)
我对Lucene并不熟悉,但我看到的唯一区别是,通过Expect调用,您在创建IndexSearcher 之前将文档添加到编写器中。在注释掉的代码中,在将文档添加到writer后, 发生了IndexSearcher的创建。这是一个重要的区别吗?