2017-01-31 8 views
1

응용 프로그램에 대한 통합 테스트의 경우 테스트 할 내용에 따라 두 개의 별도 스프링 프로파일이 있습니다. 하나는 H2를 내장 데이터베이스로 사용하는 것이고 다른 하나는 데이터베이스로 임베디드 된 MySQL을 사용합니다. 각 프로파일은 각각 H2와 MYSQL이라고 불리우며, 우리는 WithJsonItResources라는 공통 기본 클래스를 가지고 있습니다. 각 테스트가 실행 된 후에 데이터베이스를 삭제할 수 있기를 원합니다. 지금은 어떻게 보입니까?스프링 테스트를 사용하는 활성 프로파일에 따라 다른 @Sql 문 실행

@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) 
@Sql(executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, statements = "DROP DATABASE mytestdb") 
public abstract class WithJsonItResources extends WithJsonTestResources { 
    protected WithJsonItResources(Class resourcesForClass) { 
     super(resourcesForClass); 
    } 
} 
프로필이 H2 인 경우 즉, 그것이 실행되도록 내가, 검증이든 어떤 종류를 추가 할 수있는 방법

:

@Sql(executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, statements = "DROP ALL OBJECTS DELETE") 

를 그리고 그것의 경우 MYSQL이 프로파일은 실행 :

@Sql(executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, statements = "DROP DATABASE mytestdb") 

감사합니다.

답변

0

당신은 H2 또는 MYSQL을 사용할지 여부를 결정 또는 @IfProfileValue @profile 를 사용할 수있다.

은 또한 하드 코드를 돈`t 문 대신 application.properties에서 그것을 읽고 활성 프로파일을 기반으로 @Value를 사용하여 해결 문서

: @IfProfileValue \ http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/testing.html

+0

같은 약간 들리는 내가 찾고 있는데, 어떻게 \ @IfProfileValue에서 \ @Sql을 호출 할 수 있습니까? \ @Sql의 명령문 문자열 값이 동적 $ {value} 삽입을 지원합니까? 구체적인 예제 수업을 들었으므로 구체적인 해결책을 알려주시겠습니까? 감사! –

+0

@Sql 주석에 $ {value} 속성을 주입하는 Barath는 지원되지 않으므로 제안서가 유효하지 않습니다. –

+0

@IfProfileValue (name = "test.database", value = "H2")에 해당합니다. \t @Sql (statements = "$ {$ {test.database} .statements}"). 유지 된 속성 : test.database = H2 H2.statements = [DROP ALL OBJECTS DELETE] – Barath