2010-06-19 3 views
4

나는 Spring과 함께 개발 된 웹 애플리케이션 인 Selenium을 테스트하여 웹 애플리케이션이 사용자에게 적합한 것을 보여주고 사양에있는 모든 것을 할 수 있는지 확인한다.통합 테스트를 위해 다른 Spring 속성 사용하기

다른 개발자들은 단위 테스트를 위해 HSQLDB (memory in hibernate) 데이터베이스를 사용하고 있습니다. 테스트를 위해 프로그램에서 사용한 실제 DB를 사용해야합니다. Spring 애플리케이션 컨텍스트에 대한 JDBC 매개 변수는 Spring에서 런타임에로드되거나 WAR 파일을 빌드 할 때 컴파일 타임에로드됩니다. org.springframework.beans.factory.config.PropertyPlaceholderConfigurer가 webapp와 테스트에 대한 애플리케이션 컨텍스트를 구성하는 데 사용하는 스프링 사용 속성과 XML 구성 파일은 테스트와 webapp에서 공유됩니다.

속성은 Maven 프로필, 단위 테스트 또는 통합 테스트에 따라 달라질 필요가 있습니다.

내가 성공하지 않고, 여러 가지 방법을 시도 :

  • 내 자신의 DAO의 사용 낮은 수준의 SQL 쿼리를 개발하고 있습니다. 최후의 수단의 시간 낭비와 해결책입니다. 외래 키 제약 조건 및 데이터베이스 모델 변경으로 인해 응용 프로그램에 DAO 세트가 단단한 (단위 테스트 된) 세트가 있다는 점을 고려할 때 실제로는 가장 멍청한 옵션입니다.
  • Maven 필터를 사용하고 거기에 JDBC 속성을 정의하십시오. 문제는 tomcat : redeploy 목표에 단위 테스트가 포함되어 있기 때문에 속성이 주 응용 프로그램과 단위 테스트간에 공유된다는 것입니다. 그러면 응용 프로그램이 실제 DB에 연결할 수 없습니다.
  • 다른 폴더에 다른 속성이 있습니다. Spring은 프로파일의 Surefire 구성에 정의 된 추가 리소스에 대해 전혀 신경 쓰지 않는다. testResources 또는 리소스. 이상한 점은이 접근법이 주 앱의 각 환경에 대해 서로 다른 JDBC 매개 변수를 가지고 완벽하게 작동한다는 것입니다. 우리는 src/main/resources에 몇개의 폴더를 가지고 있는데 src/main/resources의 기본 속성을 오버라이드하는 속성들을 포함하고 있습니다. 그것은 단지 src/test/resources에 대해 같은 방식으로 작동하지 않습니다. 나는이 행동의 원인을 어떻게 찾을 수 있었는지조차 모른다.
  • 은 사용자 정의 Maven 매개 변수를 기반으로 다른 속성 파일을로드합니다. 동일한 속성이 기본 앱 및 단위 테스트에 사용됩니다. Spring은 속성 파일을 찾을 수 없을 때도 불평합니다. (빌드를 완료하기 위해 빈 파일이있는 디렉토리를 만들어야합니다.)

개발자 프로필 (개발자, 테스트 서버 ...)이 현재 빌드 구성이고 테스트 프로필 (단위 테스트)이 동시에 실행되고 속성이 서로 무시되지 않는 이유는 무엇입니까? Maven은 단위 테스트가 시작될 때 src/test/resources를보고, 빌드 목표가 시작될 때 src/main/resources를 봄으로 만들 것입니다. 불행히도 이와 같은 통합 테스트에는 기본 구성이 없습니다.

답변

5

우리가 할 방법이 변수를 특성 파일의 선택 기준, 그래서 봄 재산 장소 홀더는 다음과 같습니다

<context:property-placeholder location="classpath:db.${TARGET_ENV}.properties" /> 

그리고 당신이 환경으로 TARGET_ENV을 정의하는 선택의 여지가 변수를 사용하거나 -DTARGET_ENV = ...를 사용하여 maven에 전달하면됩니다.

+0

글쎄, 나는 (또는 오히려 내 동료) 이런 식으로 일을 끝냈다. –

0

단위 테스트의 경우 classpath 이전 버전부터 프로덕션 파일을 대체 할 프로덕션 파일과 이름이 같은 속성 파일이있을 수 있습니다. 예 :프로덕션 속성이 src/main/resources/my.properties이고 단위 테스트 용 파일이 src/test/resources/my.properties 일 수 있습니다.

좋은 연습은 환경 설정 값 (호스트/포트)과 환경 별 값을 사용하는 기타 응용 프로그램 별 등록 정보 파일로 별도의 등록 정보 파일을 만드는 것입니다. 그런 다음 환경 특정 파일 만 변경하면됩니다. 통합 테스트를 위해 클래스 경로에 특정 속성 파일이있을 수도 있습니다.

또한 프로덕션 아티팩트에는 환경 별 설정이 없어야합니다. 그들은 별도로 위치해야합니다.

시도해 볼 수있는 한 가지 더 많은 것은 스프링 @Profile을 사용하는 것입니다. 그러나 그들을 사용하면 코드에 비 프로덕션 설정을 적용하는 것이 좋지 않습니다.