Spring-boot는 Spring 프로파일 ( http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html )을 활용 하여 예를 들어 다른 환경에 대해 별도의 구성을 가질 수 있습니다. 이 기능을 사용하는 한 가지 방법은 통합 테스트에서 사용할 테스트 데이터베이스를 구성하는 것입니다. 그러나 내 자신의 프로필 ‘테스트’를 만들고 각 테스트 파일에서이 프로필을 명시 적으로 활성화해야하는 것이 궁금합니다. 지금은 다음과 같은 방식으로 수행합니다.
- src / main / resources 내에 application-test.properties 생성
- 거기에 테스트 특정 구성을 작성하십시오 (지금은 데이터베이스 이름 만)
-
모든 테스트 파일에는 다음이 포함됩니다.
@ActiveProfiles("test")
더 똑똑하고 간결한 방법이 있습니까? 예를 들어 기본 테스트 프로필?
편집 1 :이 질문은 Spring-Boot 1.4.1과 관련이 있습니다.
답변
내가 아는 한 귀하의 요청을 직접 처리하는 것은 없지만 도움이 될 수있는 제안을 제안 할 수 있습니다.
및을 구성 하는 메타 주석 인 자체 테스트 주석을 사용할 수 있습니다 . 따라서 여전히 전용 프로필이 필요하지만 모든 테스트에서 프로필 정의를 분산시키지 마십시오.@SpringBootTest
@ActiveProfiles("test")
이 주석은 기본적으로 프로필로 설정되며 test
메타 주석을 사용하여 프로필을 재정의 할 수 있습니다.
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@SpringBootTest
@ActiveProfiles
public @interface MyApplicationTest {
@AliasFor(annotation = ActiveProfiles.class, attribute = "profiles") String[] activeProfiles() default {"test"};
}
답변
이를 수행하는 또 다른 방법은 실제 테스트 클래스가 확장 할 기본 (추상) 테스트 클래스를 정의하는 것입니다.
@RunWith(SpringRunner.class)
@SpringBootTest()
@ActiveProfiles("staging")
public abstract class BaseIntegrationTest {
}
콘크리트 테스트 :
public class SampleSearchServiceTest extends BaseIntegrationTest{
@Inject
private SampleSearchService service;
@Test
public void shouldInjectService(){
assertThat(this.service).isNotNull();
}
}
이를 통해 @ActiveProfiles
주석 뿐 아니라 더 많은 것을 추출 할 수 있습니다 . 다른 종류의 통합 테스트 (예 : 데이터 액세스 계층 대 서비스 계층) 또는 기능적 전문성 (공통 @Before
또는 @After
방법 등)에 대해 더 전문화 된 기본 클래스를 상상할 수도 있습니다 .
답변
test / resources 폴더에 application.properties 파일을 넣을 수 있습니다. 거기 설정
spring.profiles.active=test
이것은 테스트를 실행하는 동안 일종의 기본 테스트 프로필입니다.
답변
이를위한 선언적인 방법 (사실 @Compito의 원래 답변에 대한 사소한 tweek) :
- 설정
spring.profiles.active=test
에서test/resources/application-default.properties
. test/resources/application-test.properties
테스트를 위해 추가 하고 필요한 속성 만 재정의합니다.
답변
maven을 사용하는 경우 pom.xml에 추가 할 수 있습니다.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<argLine>-Dspring.profiles.active=test</argLine>
</configuration>
</plugin>
...
그런 다음 maven은이 인수를 사용하여 통합 테스트 (* IT.java)를 실행해야하며 IntelliJ는이 프로필이 활성화 된 상태로 시작됩니다. 그러면 내부의 모든 속성을 지정할 수 있습니다.
application-test.yml
“-default”속성이 필요하지 않습니다.
답변
제 경우에는 다음과 같이 환경에 따라 다른 application.properties가 있습니다.
application.properties (base file)
application-dev.properties
application-qa.properties
application-prod.properties
application.properties는 적절한 파일을 선택하기 위해 spring.profiles.active 속성을 포함합니다.
내 통합 테스트를 위해 application-test.properties
내부에 새 파일을 만들었고 주석을 test/resources
사용하여 @TestPropertySource({ "/application-test.properties" })
해당 테스트에 대한 요구 사항에 따라 원하는 application.properties를 선택하는 파일입니다.
답변
“테스트”프로필을 활성화하려면 build.gradle에 작성하십시오.
test.doFirst {
systemProperty 'spring.profiles.active', 'test'
activeProfiles = 'test'
}