2010-08-02 4 views
1

지금이 그냥 이상한 테스트 :루씬 동작은

은 다음과 같습니다 RhinoMocks (어설 통과)와 NUnit과 단위 테스트에서 잘 작동으로 코드입니다.

이것은 코드에서 IndexSearcher를 생성합니다. 이제 조롱 된 버전의 Get (IndexSearcher의 주석 처리 된 할당을 스왑)을 사용하면 모의자가 검색자를 반환하므로 어설 션을 전달하지 않습니다.

왜 그런지 알아낼 수 있습니까? (NUnit과 2.5.2 - RhinoMocks 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); 
    } 
+0

어설 션이 실패하면 그 이유는 무엇입니까? 코뿔소에서 뭔가를 얻고 있어요. 모크? – PatrickSteele

+0

결과가 없으므로 어설 션이 실패합니다. 나는 수색자를 지 으려는 작가를 알아 보았고 나는 아직도 작가를 얻는다. – Khash

답변

1

나는 루씬에 익숙하지 해요,하지만 난 볼 수있는 유일한 차이점은 전화를 기대 통해, 당신은 전에 IndexSearcher 를 만드는 것입니다 작가에게 문서를 추가합니다. 주석 처리 된 코드에서 뒤에 IndexSearcher를 작성하면 이 발생하고 문서를 작성자에 추가합니다. 그것은 중요한 차이입니까?

+0

당신이 옳다고 생각합니다. 그러나 나는 이론을 시험 할 방법이 없다. 반환을 위해 Func 을 사용하는 방법이 있나요? 그래서 모의이 호출 될 때 코드가 실행됩니까? – Khash

+0

기대 게시물 색인 생성을 옮겼습니다! 감사. 하지만 Func (Rhino에서 WhenCalled의 함수 버전처럼)을 사용할 수 있는지 궁금합니다. – Khash

+0

.Return (...) 대신 .WhenCalled (...)를 사용하십시오. WhenCalled에 전달하는 람다는 여전히 두 번 호출됩니다 (한 번 Expect를 선언하고 "Get"이 호출 될 때). 왜 그런지는 모르겠지만이 장애물을 지나쳐야합니다. – PatrickSteele