EnableConfigurationPropertiesRegistrarTests Class — spring-boot Architecture
Architecture documentation for the EnableConfigurationPropertiesRegistrarTests class in EnableConfigurationPropertiesRegistrarTests.java from the spring-boot codebase.
Entity Profile
Relationship Graph
Source Code
core/spring-boot/src/test/java/org/springframework/boot/context/properties/EnableConfigurationPropertiesRegistrarTests.java lines 42–157
class EnableConfigurationPropertiesRegistrarTests {
private DefaultListableBeanFactory beanFactory;
private EnableConfigurationPropertiesRegistrar registrar;
@BeforeEach
void setup() {
this.beanFactory = spy(new DefaultListableBeanFactory());
this.registrar = new EnableConfigurationPropertiesRegistrar();
}
@Test
void typeWithDefaultConstructorShouldRegisterRootBeanDefinition() {
register(TestConfiguration.class);
BeanDefinition definition = this.beanFactory
.getBeanDefinition("foo-" + getClass().getName() + "$FooProperties");
assertThat(definition).satisfies(hasBindMethod(BindMethod.JAVA_BEAN));
}
@Test
void constructorBoundPropertiesShouldRegisterConfigurationPropertiesBeanDefinition() {
register(TestConfiguration.class);
BeanDefinition definition = this.beanFactory
.getBeanDefinition("bar-" + getClass().getName() + "$BarProperties");
assertThat(definition).satisfies(hasBindMethod(BindMethod.VALUE_OBJECT));
}
@Test
void typeWithMultipleConstructorsShouldRegisterGenericBeanDefinition() {
register(TestConfiguration.class);
BeanDefinition definition = this.beanFactory
.getBeanDefinition("bing-" + getClass().getName() + "$BingProperties");
assertThat(definition).satisfies(hasBindMethod(BindMethod.JAVA_BEAN));
}
@Test
void typeWithNoAnnotationShouldFail() {
assertThatIllegalStateException().isThrownBy(() -> register(InvalidConfiguration.class))
.withMessageContaining("No ConfigurationProperties annotation found")
.withMessageContaining(EnableConfigurationPropertiesRegistrar.class.getName());
}
@Test
void registrationWithDuplicatedTypeShouldRegisterSingleBeanDefinition() {
register(DuplicateConfiguration.class);
String name = "foo-" + getClass().getName() + "$FooProperties";
then(this.beanFactory).should().registerBeanDefinition(eq(name), any());
}
@Test
void registrationWithNoTypeShouldNotRegisterAnything() {
register(EmptyConfiguration.class);
String[] names = this.beanFactory.getBeanNamesForType(Object.class);
for (String name : names) {
assertThat(name).doesNotContain("-");
}
}
private Consumer<BeanDefinition> hasBindMethod(BindMethod bindMethod) {
return (definition) -> {
assertThat(definition.hasAttribute(BindMethod.class.getName())).isTrue();
assertThat(definition.getAttribute(BindMethod.class.getName())).isEqualTo(bindMethod);
};
}
private void register(Class<?> configuration) {
AnnotationMetadata metadata = AnnotationMetadata.introspect(configuration);
this.registrar.registerBeanDefinitions(metadata, this.beanFactory);
}
@EnableConfigurationProperties({ FooProperties.class, BarProperties.class, BingProperties.class })
static class TestConfiguration {
}
@EnableConfigurationProperties(EnableConfigurationPropertiesRegistrarTests.class)
static class InvalidConfiguration {
}
@EnableConfigurationProperties({ FooProperties.class, FooProperties.class })
static class DuplicateConfiguration {
}
@EnableConfigurationProperties
static class EmptyConfiguration {
}
@ConfigurationProperties("foo")
static class FooProperties {
}
@ConfigurationProperties("bar")
static class BarProperties {
BarProperties(String foo) {
}
}
@ConfigurationProperties("bing")
static class BingProperties {
BingProperties() {
}
BingProperties(String foo) {
}
}
}
Domain
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free