통합 테스트를위한 Spring-boot 기본 프로필
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
테스트를 위해 추가 하고 필요한 속성 만 재정의합니다.
제 경우에는 다음과 같이 환경에 따라 다른 application.properties가 있습니다.
application.properties (base file)
application-dev.properties
application-qa.properties
application-prod.properties
application.properties는 적절한 파일을 선택하기 위해 spring.profiles.active 속성을 포함합니다.
For my integration tests, I created a new application-test.properties
file inside test/resources
and with the @TestPropertySource({ "/application-test.properties" })
annotation this is the file who is in charge of picking the application.properties I want depending on my needs for those tests
To activate "test" profile write in your build.gradle:
test.doFirst {
systemProperty 'spring.profiles.active', 'test'
activeProfiles = 'test'
}
Another programatically way to do that:
import static org.springframework.core.env.AbstractEnvironment.DEFAULT_PROFILES_PROPERTY_NAME;
@BeforeClass
public static void setupTest() {
System.setProperty(DEFAULT_PROFILES_PROPERTY_NAME, "test");
}
It works great.
If you use maven, you can add this in 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>
...
Then, maven should run your integration tests (*IT.java) using this arugument, and also IntelliJ will start with this profile activated - so you can then specify all properties inside
application-test.yml
and you should not need "-default" properties.
Add spring.profiles.active=tests
in your application.properties file, you can add multiple properties file in your spring boot application like application-stage.properties
, application-prod.properties
, etc. And you can specify in your application.properties file while file to refer by adding spring.profiles.active=stage
or spring.profiles.active=prod
you can also pass the profile at the time running the spring boot application by providing the command:
java -jar
-Dspring.profiles.active=local
build/libs/turtle-rnr-0.0.1-SNAPSHOT.jar
According to the profile name the properties file is picked up, in the above case passing profile local
consider the application-local.properties
file
참고URL : https://stackoverflow.com/questions/39690094/spring-boot-default-profile-for-integration-tests
'IT Share you' 카테고리의 다른 글
Android Studio : UTF-8 인코딩에 매핑 할 수없는 문자 (0) | 2020.12.06 |
---|---|
임의 키에 대한 Java Lambda Stream Distinct ()? (0) | 2020.12.06 |
React 생성자에서 super () 호출은 무엇을합니까? (0) | 2020.12.06 |
Android Studio 3.0 버전에서 AVD 관리자를 여는 방법은 무엇입니까? (0) | 2020.12.06 |
Big Endian과 Little Endian 바이트 순서의 차이점 (0) | 2020.12.06 |