2012-07-13 2 views
0

우리의 데이타베이스는 포스트 그레스입니다. 우리는 JPA를 사용하여 지속성 작업을 관리합니다. 현재 우리의 테스트는 실행을 위해 postgres 서버가 있어야합니다. dev에서 처음으로 postgres 서버를 설치해야하고, CI에서 릴리즈 빌드 환경에 이르기까지 다양한 빌드 서버 환경으로 이식 할 수 있기 때문에 dev 박스에서 테스트를 실행하는 것이 번거롭다.Postgres 서버가 없어도 JPA 코드의 단위 테스트를 수행하려면 어떻게해야합니까?

가벼운 메모리 버전의 중량이 큰 db 서버를 전환 할 수 있어야합니다. 우리는 특정 포스트 그레스 특정 일을하지 않습니다. 우리의 코드는 대부분 순수한 JPA이며, 액세스 된 최대 절전 모드의 특정 기능을 제공합니다.

+0

그래서 이러한 질문에 동의하지 않았습니다. 그러나 제 질문은 나쁘다고 생각합니다. 그래서 나는 그것을 편집 할 것입니다. – chad

+0

그게 더 좋습니다;) 그리고 현재 우리의 DB 코드를 리팩터링하여 앱이 실행될 때 "진짜"지속성 유닛에 대해 실행 가능하고 유닛 테스트가 실행 중일 때 "가짜"테스팅 지속성 유닛에 대해 실행하는 방법을 조사 중입니다. 유일한 차이점은 테스트 지속성 단위의 db 구성 측면이 in 메모리 db를 가리키는 것입니다. – chad

답변

1

dependency inject 데이터베이스를 유닛 테스트에 필요한 코드로 변환 할 수 있습니다. 코드가 postgressql에 종속되어 있기 때문에 삽입하기가 어렵다면 PowerMock을 사용하여 제어하는 ​​가짜를 반환하는 정적 또는 생성자 메서드를 바꿀 수 있습니다.

반환하는 가짜 데이터베이스는 테스트해야하는 항목에 따라 사전 설정 값이있는 해시 테이블처럼 간단 할 수 있습니다.

0

두 가지 가능성이 있습니다. 당신은 분리 된 포스트그레스 데이터베이스를 셋업하고 CI 코드를 그것에 연결할 수 있습니다. 그러나 종종 필요하지 않습니다. 데이터베이스 코드가 postgres에 특화된 기능을 사용하지 않는다면, 다른 메모리 내 데이터베이스를 사용해보십시오. 예. h2 또는 hsqldb. 필요하다면 좀 더 이식성있게 만들기 위해 코드를 약간 변경할 수도 있습니다. 두 번째 옵션은 당연히 조금 더 위험합니다. 코드가 메모리 내 db에서는 작동하지만 포스트그레스에서는 작동하지 않을 가능성이 항상 있기 때문입니다. 그러나 첫 번째 옵션은 관리 및 유지 보수가 조금 더 필요할 수 있습니다.

관련 문제