응용 프로그램에 대한 통합 테스트의 경우 테스트 할 내용에 따라 두 개의 별도 스프링 프로파일이 있습니다. 하나는 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")
감사합니다.
같은 약간 들리는 내가 찾고 있는데, 어떻게 \ @IfProfileValue에서 \ @Sql을 호출 할 수 있습니까? \ @Sql의 명령문 문자열 값이 동적 $ {value} 삽입을 지원합니까? 구체적인 예제 수업을 들었으므로 구체적인 해결책을 알려주시겠습니까? 감사! –
@Sql 주석에 $ {value} 속성을 주입하는 Barath는 지원되지 않으므로 제안서가 유효하지 않습니다. –
@IfProfileValue (name = "test.database", value = "H2")에 해당합니다. \t @Sql (statements = "$ {$ {test.database} .statements}"). 유지 된 속성 : test.database = H2 H2.statements = [DROP ALL OBJECTS DELETE] – Barath