2011-08-26 5 views
3

JCR API를 통해 컨텐츠 리포지토리에 액세스하는 코드가 있습니다. 내 코드는 OSGI 환경에서 개발 중이다. 내가 원하는 것은 환경에 관계없이 단위 테스트를 실행하는 동안 사용할 수있는 JCR 콘텐츠 저장소를 갖는 것입니다. 프로젝트를 빌드하는 모든 사용자가 사용할 수 있어야합니다. 다른 가상 컴퓨터에서 실행되는 일부 외부 콘텐츠 저장소에 의존하고 싶지 않습니다.JCR 리포지토리 (Junit 테스트 가능)

그런 일을 할 수 있습니까? 미리 감사드립니다.

답변

3

Jackrabbit 구현에서 제공하는 임시 저장소를 볼 수도 있습니다. 일시 저장소가 자동으로 초기화하고 첫 번째 세션이 열릴 또는 마지막 하나가 폐쇄 기본 저장소 인스턴스를 종료

저장소 프록시 (당신이 잭 래빗 구현을 사용하는 가정). - API doc

here 제발 봐 - 그것의 인스턴스를 생성 정말 쉽습니다. 로컬 저장소이므로 네트워크를 거칠 필요가 없습니다.

나는 일반적으로 과도 저장소 및 setUpClass/BeforeClass에 한 번 JUnit 테스트 클래스 당 세션 후크 모든 테스트 케이스에 걸쳐 재사용, (세션을 청소를 만들 예를 들어, 테스트 케이스 동안 내가 추가 한 노드를 제거 , 등).

그러나 임시 저장소를 사용하면 하나의 단점은 기본 디렉토리에 저장소 별 파일/디렉토리가 여러 개 생성된다는 것입니다. maven을 사용하는 경우 maven-clean-plugin을 사용하여 원하지 않는 파일을 해결책으로 정리할 수 있습니다.

+0

+1 예에 대한 링크입니다. – rwitzel

2

Apache Sling의 RepositoryTestBase 클래스는 "단위 테스트"에 사용할 수있는 저장소를 제공합니다. 슬링 의존성을 가지고 있기 때문에 그대로 사용할 수는 없겠지만 좋은 출발점 일 것입니다.

0

ModeShape는 단위 테스트 내에서 쉽게 사용할 수 있으며 단위 테스트의 경우 In-Memory connectorDisk connector이 훌륭하고 매우 빠릅니다 (각 테스트 후에 메모리 내에서 정리가 필요하지 않음). 우리의 JcrEngineTest은 몇 가지 라인에서 엔진 인스턴스를 구성하고 시작하는 각 메소드로 얼마나 쉬운지를 보여줍니다. 이 중 많은 테스트 complete in under 100ms.

0

사용하십시오 MemoryFileSystemTransientRepositoryIn-Memory PM 또는 H2 같은 메모리 데이터베이스를 hanlde 수있는 데이터베이스 지속성 관리자.