나는 JUnit4 테스트 클래스, 다른 방법과 함께, 거기에이 방법으로 @Transactional
로 주석 한 :Hibernate Search를 사용하는 서비스를 테스트하는 방법은 무엇입니까?
@Test
public void testDiscoverArtworksByTitle()
{
FullTextEntityManager ftem = Search.getFullTextEntityManager(this.entityManager);
this.prepareArtworksForListing();
ftem.flushToIndexes();
List<ArtworkListItem> listItems = this.artworkService.discoverArtworksByTitle("Die Hard");
Assert.assertNotEquals("There are some items in the list", 0, listItems.size());
// housekeeping
ftem.purgeAll(ArtworkEntity.class);
}
는 기본적으로, 나는 몇 가지 검색 기능을 구축하고있어 개발하는 동안 내가 제대로 테스트 할 것 그리고 주로 나중에. 요컨대,이 테스트는 항상 색인이 작성되지 않은 것처럼 실패합니다. prepareArtworksForListing()
메서드는 메모리 내 데이터베이스에 일부 레코드를 (persist(..)
을 사용하여) 만듭니다. Hethernate는 H.Search/Lucene과 적절하게 연결되어 있는데,이 메소드에 @Transactional(propagation = Propagation.NOT_SUPPORTED)
이라는 주석을 달고 명시 적으로 em.getTransaction().begin()
및 em.getTransaction().commit()/.rollback()
을 호출하면 테스트가 통과되지만 이후의 테스트 메소드는 READ_ONLY TX Error
으로 실패합니다. 원래 @Transactional
속성이없는 경우입니다. 수업.