[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.내가 아는 한 귀하의 요청을 직접적으로 다루는 것은 없습니다. 그러나 도움이 될 수있는 제안을 제안 할 수 있습니다.
내가 아는 한 귀하의 요청을 직접적으로 다루는 것은 없습니다. 그러나 도움이 될 수있는 제안을 제안 할 수 있습니다.
@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.이를 수행하는 또 다른 방법은 실제 테스트 클래스가 확장 할 기본 (추상) 테스트 클래스를 정의하는 것입니다.
이를 수행하는 또 다른 방법은 실제 테스트 클래스가 확장 할 기본 (추상) 테스트 클래스를 정의하는 것입니다.
@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.application.properties 파일을 test / resources 폴더에 넣을 수 있습니다. 거기에 당신이 설정했습니다.
application.properties 파일을 test / resources 폴더에 넣을 수 있습니다. 거기에 당신이 설정했습니다.
spring.profiles.active=test
이것은 테스트를 실행하는 동안 일종의 기본 테스트 프로필입니다.
-
==============================
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.프로그램 방식으로이를 수행하는 또 다른 방법은 다음과 같습니다.
프로그램 방식으로이를 수행하는 또 다른 방법은 다음과 같습니다.
import static org.springframework.core.env.AbstractEnvironment.DEFAULT_PROFILES_PROPERTY_NAME; @BeforeClass public static void setupTest() { System.setProperty(DEFAULT_PROFILES_PROPERTY_NAME, "test"); }
그것은 위대한 작품.
from https://stackoverflow.com/questions/39690094/spring-boot-default-profile-for-integration-tests by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 큰 트랜잭션 도중에 Hibernate 세션을 안전하게 지운다. (0) | 2019.01.29 |
---|---|
[SPRING] 주석이있는 Map에서 Enum 키를 설정하는 방법 (0) | 2019.01.29 |
[SPRING] Spring MVC 사용자 정의 메소드 매개 변수 바인딩 (0) | 2019.01.28 |
[SPRING] Spring 부트 : CommonMultipartResolver의 maxUploadSize를 구성 할 때 ClassNotFoundException이 발생합니다. (0) | 2019.01.28 |
[SPRING] 스프링의 @RequestBody 및 @RequestParam 학습 (0) | 2019.01.28 |