@Conditional, Condition 학습 테스트
public class ConditionalTest {
@Test
void conditional() {
// true
// Bean 구성정보를 확인하여 테스트할 수 있는객체 ApplicationContextRunner 생성
ApplicationContextRunner contextRunner1 = new ApplicationContextRunner();
// Configuration 구성정보 Class를 매개변수로 넘겨주고
contextRunner1.withUserConfiguration(Config1.class)
.run(context -> {
// context에 해당 빈들이 존재하는지 테스트한다.
assertThat(context).hasSingleBean(MyBean.class);
assertThat(context).hasSingleBean(Config1.class);
});
// false
ApplicationContextRunner contextRunner2 = new ApplicationContextRunner();
contextRunner2.withUserConfiguration(Config2.class)
.run(context -> {
// doesNotHaveBean의 경우에는 존재하지않을경우를 테스트한다.
assertThat(context).doesNotHaveBean(MyBean.class);
assertThat(context).doesNotHaveBean(Config2.class);
});
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Conditional(BooleanCondition.class)
@interface BooleanConditional {
boolean value();
}
@Configuration
@BooleanConditional(true)
static class Config1 {
@Bean
MyBean myBean() {
return new MyBean();
}
}
@Configuration
@BooleanConditional(false)
static class Config2 {
@Bean
MyBean myBean() {
return new MyBean();
}
}
static class BooleanCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
// BooleanCondition 애노테이션에 매개변수로 넘겨지는 메타정보를 확인한다.
// BooleanConditional의 애트리뷰트 정보를 Map형태로 가져온다.
Map<String ,Object> annotationAttributes = metadata.getAnnotationAttributes(BooleanConditional.class.getName());
// value이름으로된 애트리뷰트를 가져온다.
Boolean value = (Boolean) annotationAttributes.get("value");
return value;
}
}
static class MyBean { }
}
@Conditional, Condition을 통해서 Spring Container에 Bean 등록여부를 확인하는 테스트 코드 작성
'Spring > 인프런 토비의 Spring Boot' 카테고리의 다른 글
섹션 7-5 [조건부 자동구성] 자동 구성 정보 대체하기 (0) | 2024.06.27 |
---|---|
섹션 7-4 [조건부 자동구성] 커스텀 @Conditional (0) | 2024.06.27 |
섹션 7-2 [조건부 자동구성] @Conditional과 Condition (0) | 2024.06.27 |
섹션 7-1 [조건부 자동구성] 스타터와 Jetty 서버 구성 추가 (0) | 2024.06.27 |
섹션 6-5 [자동 구성 기반 애플리케이션] 동적인 자동 구성 정보 등록 (0) | 2024.06.15 |