Loading...
Spring Framework Reference Documentation 7.0.2의 Context Configuration Inheritance의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
@ContextConfiguration은 resource location이나 component class 및 context initializer가 superclass에 의해 선언된 것이 상속되어야 하는지를 나타내는 boolean inheritLocations와 inheritInitializers attribute를 지원합니다. 두 flag의 기본값은 true입니다. 이는 test class가 superclass에 의해 선언된 resource location이나 component class뿐만 아니라 context initializer도 상속한다는 것을 의미합니다.
구체적으로, test class에 대한 resource location이나 component class는 superclass에 의해 선언된 resource location이나 annotated class의 목록에 추가됩니다. 마찬가지로, 주어진 test class에 대한 initializer는 test superclass에 의해 정의된 initializer 집합에 추가됩니다. 따라서 subclass는 resource location, component class 또는 context initializer를 확장할 수 있는 선택권을 갖습니다.
@ContextConfiguration에서 inheritLocations 또는 inheritInitializers attribute가 false로 설정되면, 해당 test class에 대한 resource location이나 component class 및 context initializer는 각각 superclass에 의해 정의된 설정을 가리고 사실상 이를 대체합니다.
Test 설정은 enclosing class로부터도 상속될 수 있습니다. 자세한 내용은
@Nestedtest class configuration을 참조하십시오.
다음 예제에서는 XML resource location을 사용하며, ExtendedTest에 대한 ApplicationContext는 base-config.xml과 extended-config.xml에서 해당 순서로 로드됩니다. 따라서 extended-config.xml에 정의된 Bean은 base-config.xml에 정의된 Bean을 override(즉, 대체)할 수 있습니다. 다음 예제는 한 class가 다른 class를 확장하고 자신의 설정 파일과 superclass의 설정 파일을 모두 사용할 수 있는 방법을 보여줍니다:
1@ExtendWith(SpringExtension.class) 2// ApplicationContext will be loaded from "/base-config.xml" 3// in the root of the classpath 4@ContextConfiguration("/base-config.xml") // (1) 5class BaseTest { 6 // class body... 7} 8 9// ApplicationContext will be loaded from "/base-config.xml" and 10// "/extended-config.xml" in the root of the classpath 11@ContextConfiguration("/extended-config.xml") // (2) 12class ExtendedTest extends BaseTest { 13 // class body... 14}
| 1 | superclass에 정의된 설정 파일. |
| 2 | subclass에 정의된 설정 파일. |
1@ExtendWith(SpringExtension::class) 2// ApplicationContext will be loaded from "/base-config.xml" 3// in the root of the classpath 4@ContextConfiguration("/base-config.xml") // (1) 5open class BaseTest { 6 // class body... 7} 8 9// ApplicationContext will be loaded from "/base-config.xml" and 10// "/extended-config.xml" in the root of the classpath 11@ContextConfiguration("/extended-config.xml") // (2) 12class ExtendedTest : BaseTest() { 13 // class body... 14}
| 1 | superclass에 정의된 설정 파일. |
| 2 | subclass에 정의된 설정 파일. |
마찬가지로, 다음 예제에서는 component class를 사용하며, ExtendedTest에 대한 ApplicationContext는 BaseConfig와 ExtendedConfig class에서 해당 순서로 로드됩니다. 따라서 ExtendedConfig에 정의된 Bean은 BaseConfig에 정의된 Bean을 override(즉, 대체)할 수 있습니다. 다음 예제는 한 class가 다른 class를 확장하고 자신의 설정 class와 superclass의 설정 class를 모두 사용할 수 있는 방법을 보여줍니다:
1// ApplicationContext will be loaded from BaseConfig 2@SpringJUnitConfig(BaseConfig.class) // (1) 3class BaseTest { 4 // class body... 5} 6 7// ApplicationContext will be loaded from BaseConfig and ExtendedConfig 8@SpringJUnitConfig(ExtendedConfig.class) // (2) 9class ExtendedTest extends BaseTest { 10 // class body... 11}
| 1 | superclass에 정의된 설정 class. |
| 2 | subclass에 정의된 설정 class. |
1// ApplicationContext will be loaded from BaseConfig 2@SpringJUnitConfig(BaseConfig::class) // (1) 3open class BaseTest { 4 // class body... 5} 6 7// ApplicationContext will be loaded from BaseConfig and ExtendedConfig 8@SpringJUnitConfig(ExtendedConfig::class) // (2) 9class ExtendedTest : BaseTest() { 10 // class body... 11}
| 1 | superclass에 정의된 설정 class. |
| 2 | subclass에 정의된 설정 class. |
다음 예제에서는 context initializer를 사용하며, ExtendedTest에 대한 ApplicationContext는 BaseInitializer와 ExtendedInitializer를 사용하여 초기화됩니다. 그러나 initializer가 호출되는 순서는 이들이 Spring의 Ordered 인터페이스를 구현하는지, Spring의 @Order 어노테이션 또는 표준 @Priority 어노테이션이 적용되어 있는지에 따라 달라진다는 점에 유의하십시오. 다음 예제는 한 class가 다른 class를 확장하고 자신의 initializer와 superclass의 initializer를 모두 사용할 수 있는 방법을 보여줍니다:
1// ApplicationContext will be initialized by BaseInitializer 2@SpringJUnitConfig(initializers = BaseInitializer.class) // (1) 3class BaseTest { 4 // class body... 5} 6 7// ApplicationContext will be initialized by BaseInitializer 8// and ExtendedInitializer 9@SpringJUnitConfig(initializers = ExtendedInitializer.class) // (2) 10class ExtendedTest extends BaseTest { 11 // class body... 12}
| 1 | superclass에 정의된 Initializer. |
| 2 | subclass에 정의된 Initializer. |
1// ApplicationContext will be initialized by BaseInitializer 2@SpringJUnitConfig(initializers = [BaseInitializer::class]) // (1) 3open class BaseTest { 4 // class body... 5} 6 7// ApplicationContext will be initialized by BaseInitializer 8// and ExtendedInitializer 9@SpringJUnitConfig(initializers = [ExtendedInitializer::class]) // (2) 10class ExtendedTest : BaseTest() { 11 // class body... 12}
| 1 | superclass에 정의된 Initializer. |
| 2 | subclass에 정의된 Initializer. |
Context Configuration with Context Initializers
Context Configuration with Environment Profiles