2010-04-14 2 views
8

여기 내가하려는 일이 있습니다. 웹 응용 프로그램에서 JPA 지속성을 사용하고 있지만 컨테이너 외부에서 실행하려는 단위 테스트 집합이 있습니다.JPA persistence.xml 클래스 경로가 있습니까?

내 기본 응용 프로그램의 META_INF 폴더에 내 기본 내용이 persistence.xml이며 컨테이너 (Glassfish)에서 훌륭하게 작동합니다.

test-classes 디렉토리의 META-INF 폴더에 두 번째 persistence.xml을 넣었습니다. 여기에는 테스트 용으로 만 사용하려는 별도의 지속성 단위가 들어 있습니다. 이클립스에서는이 폴더를 기본 폴더보다 classpath에서 더 높게 설정했는데 제대로 작동하는 것 같습니다.

이제 명령 줄에서 직접 maven 빌드를 실행하고 단위 테스트를 실행하려고하면 persistence.xml 무시가 무시됩니다. maven의 META-INF 폴더에있는 override가 test-classes 디렉토리를 생성하고이 파일을 사용하기 위해 maven 테스트를 예상했지만 실제로는 그렇지 않습니다. 비슷한 방식으로 구현 된 My Spring 테스트 구성 재정의가 효과적입니다.

persistence.xml이 클래스 경로를 통해 위치하는지 혼란 스럽습니다. 그렇다면, 내 override는 maven surefire 플러그인 explains "[테스트 클래스 디렉토리]가 테스트 클래스 경로의 시작 부분에 포함되기 때문에 스프링 오버라이드처럼 작동해야합니다".

persistence.xml 파일의 위치를 ​​잘못 예상 했습니까?

제품 persistence.xml 파일에 두 번째 지속성 장치를 만들 수 있지만 테스트 구성을이 프로덕션 파일에 배치하는 것이 더럽습니다. 내 목표를 달성하는 방법에 대한 다른 아이디어는 환영합니다.

답변

3

persistence.xml이 클래스 경로에서로드됩니다. 과거에, 당신이 묘사 한 것을 정확히했습니다.

이것은 maven의 문제 일 가능성이 큽니다. -X 옵션을 사용하여 실행하여 maven 클래스 경로를 디버깅 할 수 있습니다.

+0

확인 - 의견에 감사드립니다. 적어도 나는 완전히 밖으로 나가고있는 것을하지 않는다는 것을 안다. – Vinnie

+0

OK - 이제 작동 중입니다. 각 퍼시스턴스 유닛을 같은 이름의 다른 파일에 명명하기 전에. 테스트 지속성 단위를 다른 이름으로 변경했습니다. 그것은 나에게 맞는 것 같지 않지만 어쩌면 이것이 내가 알지 못했던 제한이다. – Vinnie

+0

필자는 이전에이 코드를 작성하여 코드를 파헤 쳤고, 테스트 persistence.xml 파일에도 동일한 (비 테스트) 지속성 단위가 정의되었지만 단위 테스트 용으로 정의 된 다른 지속성 단위를 사용했습니다. 그것은 아마도 필요하지는 않았다. 엔티티 관리자를 만들 때 단위 테스트에서 테스트 지속성 단위를 사용한다고 생각합니다. –

4

"두 번째"persistence.xml (테스트 버전)을 어디에 두었는지 확실하지 않지만 src/test/resources/META-INF에 두어야합니다. 테스트 리소스는 유닛 테스트를 위해 Maven이 설정 한 클래스 경로에 자동으로 추가되며 src/main/resources에 위치한 리소스보다 우선합니다.

+0

오른쪽. 그것은 그것이있는 곳입니다. – Vinnie

관련 문제