IT Share you

통합 테스트를위한 Spring-boot 기본 프로필

shareyou 2020. 12. 6. 22:20
반응형

통합 테스트를위한 Spring-boot 기본 프로필


Spring-boot는 Spring 프로파일 ( http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html )을 활용 하여 다른 환경에 대해 별도의 구성을 가질 수 있습니다. 이 기능을 사용하는 한 가지 방법은 통합 테스트에서 사용할 테스트 데이터베이스를 구성하는 것입니다. 그러나 내 자신의 프로필 '테스트'를 만들고 각 테스트 파일에서이 프로필을 명시 적으로 활성화해야하는 것이 궁금합니다. 지금은 다음과 같은 방식으로 수행합니다.

  1. src / main / resources 내에 application-test.properties 생성
  2. 거기에 테스트 특정 구성을 작성하십시오 (지금은 데이터베이스 이름 만)
  3. 모든 테스트 파일에는 다음이 포함됩니다.

    @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) :

  1. 설정 spring.profiles.active=test에서 test/resources/application-default.properties.
  2. 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=localbuild/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

반응형