복붙노트

[SPRING] 통합 테스트를위한 스프링 부트 기본 프로파일

SPRING

통합 테스트를위한 스프링 부트 기본 프로파일

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

더 똑똑하고 / 더 간결한 방법이 있습니까? 예를 들어 기본 테스트 프로필입니까?

편집 1 :이 질문은 스프링 - 부트 1.4.1과 관련이있다.

해결법

  1. ==============================

    1.내가 아는 한 귀하의 요청을 직접적으로 다루는 것은 없습니다. 그러나 도움이 될 수있는 제안을 제안 할 수 있습니다.

    내가 아는 한 귀하의 요청을 직접적으로 다루는 것은 없습니다. 그러나 도움이 될 수있는 제안을 제안 할 수 있습니다.

    @SpringBootTest와 @ActiveProfiles ( "test")로 구성된 메타 주석인 자신 만의 테스트 주석을 사용할 수 있습니다. 따라서 전용 프로필이 필요하지만 모든 테스트에서 프로필 정의가 분산되지 않도록하십시오.

    이 주석은 기본적으로 프로파일 테스트로 설정되며 메타 주석을 사용하여 프로파일을 재정의 할 수 있습니다.

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    @SpringBootTest
    @ActiveProfiles
    public @interface MyApplicationTest {
      @AliasFor(annotation = ActiveProfiles.class, attribute = "profiles") String[] activeProfiles() default {"test"};
    }
    
  2. ==============================

    2.이를 수행하는 또 다른 방법은 실제 테스트 클래스가 확장 할 기본 (추상) 테스트 클래스를 정의하는 것입니다.

    이를 수행하는 또 다른 방법은 실제 테스트 클래스가 확장 할 기본 (추상) 테스트 클래스를 정의하는 것입니다.

    @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 주석 이상을 추출 할 수 있습니다. 또한 다양한 종류의 통합 테스트에 대해보다 전문화 된 기본 클래스를 상상할 수도 있습니다. 데이터 액세스 계층 vs 서비스 계층 또는 기능별 전문 분야 (공통 @Before 또는 @After 메소드 등).

  3. ==============================

    3.application.properties 파일을 test / resources 폴더에 넣을 수 있습니다. 거기에 당신이 설정했습니다.

    application.properties 파일을 test / resources 폴더에 넣을 수 있습니다. 거기에 당신이 설정했습니다.

    spring.profiles.active=test
    

    이것은 테스트를 실행하는 동안 일종의 기본 테스트 프로필입니다.

  4. ==============================

    4.내 경우에는 환경에 따라 다른 application.properties가 있습니다.

    내 경우에는 환경에 따라 다른 application.properties가 있습니다.

    application.properties (base file)
    application-dev.properties
    application-qa.properties
    application-prod.properties
    

    application.properties에는 적절한 파일을 선택하는 spring.profiles.active 속성이 포함되어 있습니다.

    내 통합 테스트를 위해 테스트 / 리소스 내에 새로운 application-test.properties 파일을 만들고 @TestPropertySource ({ "/application-test.properties"}) 주석을 사용하여 애플리케이션을 선택하는 파일을 작성했습니다. 테스트에 대한 나의 필요에 따라 원하는 속성

  5. ==============================

    5.프로그램 방식으로이를 수행하는 또 다른 방법은 다음과 같습니다.

    프로그램 방식으로이를 수행하는 또 다른 방법은 다음과 같습니다.

      import static org.springframework.core.env.AbstractEnvironment.DEFAULT_PROFILES_PROPERTY_NAME;
    
      @BeforeClass
      public static void setupTest() {
        System.setProperty(DEFAULT_PROFILES_PROPERTY_NAME, "test");
      }
    

    그것은 위대한 작품.

  6. from https://stackoverflow.com/questions/39690094/spring-boot-default-profile-for-integration-tests by cc-by-sa and MIT license