[SPRING] 메타 주석 및 테스트 클래스에서 @ActiveProfiles가 작동하지 않음
SPRING메타 주석 및 테스트 클래스에서 @ActiveProfiles가 작동하지 않음
스프링 기반 단위 테스트에서 사용할 두 개의 프로파일을 활성화하는 메타 주석 @EmbeddedMongoDBUnitTest를 만들었습니다. 기본 설정 작동 :
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@ActiveProfiles({"embeddedMongoDB", "embeddedMongoDBUnitTest"})
public @interface EmbeddedMongoDBUnitTest {
}
@RunWith(SpringJUnit4ClassRunner.class)
@EmbeddedMongoDBUnitTest
@ContextConfiguration(...)
public class WorkingTest {
...
}
이제 테스트 클래스 자체에서 다른 @ActiveProfiles 주석으로 다른 프로파일을 활성화하려고하면 @EmbeddedMongoDBUnitTest의 프로파일이 더 이상 활성화되지 않습니다.
@RunWith(SpringJUnit4ClassRunner.class)
@EmbeddedMongoDBUnitTest
@ActiveProfiles({"h2IntegrationTests"})
@ContextConfiguration(...)
public class NotWorkingTest {
...
}
이것이 작동하지 않는 이유가 있습니까? 아니면 스프링 테스트 코드의 버그입니까?
해결법
-
==============================
1.이것은 버그가 아니므로 의도적으로 설계된 것입니다.
이것은 버그가 아니므로 의도적으로 설계된 것입니다.
이것이 작동하지 않는 이유는이 구성 형식이 Spring에 의해 지원되지 않는다는 것입니다.
애노테이션을 검색 할 때 스프링 프레임 워크가 사용하는 알고리즘은 찾은 애노테이션이 처음 발견되었을 때 멈 춥니 다. 따라서 예제에서 NotWorkingTest의 @ActiveProfiles 주석은 구성된 @EmbeddedMongoDBUnitTest 주석의 @ActiveProfiles 주석을 효과적으로 음영 처리합니다.
이것들은 핵심적인 Spring 프레임 워크에서 주석에 대한 일반적인 의미론이다. 즉, 발생한 동작은 스프링 테스트 모듈과 관련이 없습니다.
즉, @ActiveProfiles를 통해 선언 된 프로파일은 사실 테스트 클래스 계층 구조에서 상속됩니다 (inheritProfiles 플래그를 false로 설정하지 않은 경우). 하지만 클래스 계층을 주석 계층과 혼동하지 마십시오. Java는 인터페이스 및 클래스에 대한 상속을 지원하지만 주석에 대해서는 상속을 지원하지 않습니다.
희망이 물건을 명확히!
샘 (스프링 테스트 모듈의 구성 부품 리드)
from https://stackoverflow.com/questions/26176038/activeprofiles-in-meta-annotation-and-on-test-class-not-working by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트는 문자열에서 자리 표시자를 해결할 수 없습니다. (0) | 2019.04.12 |
---|---|
[SPRING] Spring 4 with thymeleaf 국제화는 자원 특성 파일에서 메시지를 식별하지 못함 (0) | 2019.04.12 |
[SPRING] 스프링 MVC 폼 유효성 검사가 작동하지 않습니다. (0) | 2019.04.12 |
[SPRING] Grails 플러그인 빈의 오버라이드 메소드 (0) | 2019.04.12 |
[SPRING] Maven + Spring + Hibernate : hibernate3-maven-plugin hbm2ddl은 "원인 : java.lang.NullPointerException"이유로 실패합니다. (0) | 2019.04.12 |