Browse Source

Polishing

pull/33597/head
Sam Brannen 1 year ago
parent
commit
b943bdeec2
  1. 6
      spring-test/src/main/java/org/springframework/test/context/bean/override/BeanOverrideBeanFactoryPostProcessor.java
  2. 6
      spring-test/src/main/java/org/springframework/test/context/bean/override/BeanOverrideProcessor.java
  3. 1
      spring-test/src/main/java/org/springframework/test/context/bean/override/convention/TestBeanOverrideMetadata.java
  4. 2
      spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java
  5. 12
      spring-test/src/test/java/org/springframework/test/context/bean/override/BeanOverrideBeanFactoryPostProcessorTests.java
  6. 54
      spring-test/src/test/java/org/springframework/test/context/bean/override/OverrideMetadataTests.java
  7. 6
      spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanContextCustomizerEqualityTests.java
  8. 13
      spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanTests.java

6
spring-test/src/main/java/org/springframework/test/context/bean/override/BeanOverrideBeanFactoryPostProcessor.java

@ -149,8 +149,10 @@ class BeanOverrideBeanFactoryPostProcessor implements BeanFactoryPostProcessor,
existingBeanDefinition = beanFactory.getBeanDefinition(beanName); existingBeanDefinition = beanFactory.getBeanDefinition(beanName);
} }
else if (enforceExistingDefinition) { else if (enforceExistingDefinition) {
throw new IllegalStateException("Unable to override bean '" + beanName + "': there is no " + throw new IllegalStateException("""
"bean definition to replace with that name of type " + overrideMetadata.getBeanType()); Unable to override bean: there is no bean definition to replace \
with name [%s] and type [%s]."""
.formatted(beanName, overrideMetadata.getBeanType()));
} }
beanNameIncludingFactory = beanName; beanNameIncludingFactory = beanName;
} }

6
spring-test/src/main/java/org/springframework/test/context/bean/override/BeanOverrideProcessor.java

@ -40,9 +40,9 @@ public interface BeanOverrideProcessor {
/** /**
* Create an {@link OverrideMetadata} instance for the given annotated field. * Create an {@link OverrideMetadata} instance for the given annotated field.
* @param overrideAnnotation the composed annotation that defines the * @param overrideAnnotation the composed annotation that declares the
* {@link BeanOverride @BeanOverride} that triggers this processor * {@link BeanOverride @BeanOverride} annotation that triggers this processor
* @param testClass the test class being processed * @param testClass the test class to process
* @param field the annotated field * @param field the annotated field
* @return the {@link OverrideMetadata} instance that should handle the * @return the {@link OverrideMetadata} instance that should handle the
* given field * given field

1
spring-test/src/main/java/org/springframework/test/context/bean/override/convention/TestBeanOverrideMetadata.java

@ -81,4 +81,5 @@ final class TestBeanOverrideMetadata extends OverrideMetadata {
public int hashCode() { public int hashCode() {
return this.overrideMethod.hashCode() * 29 + super.hashCode(); return this.overrideMethod.hashCode() * 29 + super.hashCode();
} }
} }

2
spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java

@ -676,7 +676,7 @@ class MockHttpServletRequestTests {
void startAsyncShouldUpdateRequestState() { void startAsyncShouldUpdateRequestState() {
assertThat(request.isAsyncStarted()).isFalse(); assertThat(request.isAsyncStarted()).isFalse();
request.setAsyncSupported(true); request.setAsyncSupported(true);
AsyncContext asyncContext = request.startAsync(); request.startAsync();
assertThat(request.isAsyncStarted()).isTrue(); assertThat(request.isAsyncStarted()).isTrue();
} }

12
spring-test/src/test/java/org/springframework/test/context/bean/override/BeanOverrideBeanFactoryPostProcessorTests.java

@ -69,8 +69,8 @@ class BeanOverrideBeanFactoryPostProcessorTests {
assertThatIllegalStateException() assertThatIllegalStateException()
.isThrownBy(context::refresh) .isThrownBy(context::refresh)
.withMessage("Unable to override bean 'descriptionBean': there is no bean definition " + .withMessage("Unable to override bean: there is no bean definition " +
"to replace with that name of type java.lang.String"); "to replace with name [descriptionBean] and type [java.lang.String].");
} }
@Test @Test
@ -80,8 +80,8 @@ class BeanOverrideBeanFactoryPostProcessorTests {
assertThatIllegalStateException() assertThatIllegalStateException()
.isThrownBy(context::refresh) .isThrownBy(context::refresh)
.withMessage("Unable to override bean 'descriptionBean': there is no bean definition " + .withMessage("Unable to override bean: there is no bean definition " +
"to replace with that name of type java.lang.String"); "to replace with name [descriptionBean] and type [java.lang.String].");
} }
@Test @Test
@ -102,7 +102,9 @@ class BeanOverrideBeanFactoryPostProcessorTests {
private AnnotationConfigApplicationContext prepareContextWithFactoryBean(Object objectTypeAttribute) { private AnnotationConfigApplicationContext prepareContextWithFactoryBean(Object objectTypeAttribute) {
AnnotationConfigApplicationContext context = createContext(CaseOverrideBeanProducedByFactoryBean.class); AnnotationConfigApplicationContext context = createContext(CaseOverrideBeanProducedByFactoryBean.class);
// Register a TestFactoryBean that will not be overridden
context.registerBean("testFactoryBean", TestFactoryBean.class, TestFactoryBean::new); context.registerBean("testFactoryBean", TestFactoryBean.class, TestFactoryBean::new);
// Register another TestFactoryBean that will be overridden
RootBeanDefinition factoryBeanDefinition = new RootBeanDefinition(TestFactoryBean.class); RootBeanDefinition factoryBeanDefinition = new RootBeanDefinition(TestFactoryBean.class);
factoryBeanDefinition.setAttribute(FactoryBean.OBJECT_TYPE_ATTRIBUTE, objectTypeAttribute); factoryBeanDefinition.setAttribute(FactoryBean.OBJECT_TYPE_ATTRIBUTE, objectTypeAttribute);
context.registerBeanDefinition("beanToBeOverridden", factoryBeanDefinition); context.registerBeanDefinition("beanToBeOverridden", factoryBeanDefinition);
@ -142,7 +144,7 @@ class BeanOverrideBeanFactoryPostProcessorTests {
} }
@Test @Test
void replaceBeanByTypeWithMultipleMatchesAndFieldNameQualifierMatches() { void replaceBeanByTypeWithMultipleMatchesAndFieldNameAsFallbackQualifierMatches() {
AnnotationConfigApplicationContext context = createContext(CaseByType.class); AnnotationConfigApplicationContext context = createContext(CaseByType.class);
context.registerBean("counter", Integer.class, () -> 1); context.registerBean("counter", Integer.class, () -> 1);
context.registerBean("someInteger", Integer.class, () -> 2); context.registerBean("someInteger", Integer.class, () -> 2);

54
spring-test/src/test/java/org/springframework/test/context/bean/override/OverrideMetadataTests.java

@ -44,12 +44,12 @@ import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
* @author Stephane Nicoll * @author Stephane Nicoll
* @since 6.2 * @since 6.2
*/ */
public class OverrideMetadataTests { class OverrideMetadataTests {
@Test @Test
void forTestClassWithSingleField() { void forTestClassWithSingleField() {
List<OverrideMetadata> overrideMetadata = OverrideMetadata.forTestClass(SingleAnnotation.class); List<OverrideMetadata> overrideMetadata = OverrideMetadata.forTestClass(SingleAnnotation.class);
assertThat(overrideMetadata).singleElement().satisfies(hasTestBeanMetadata( assertThat(overrideMetadata).singleElement().satisfies(hasOverrideMetadata(
field(SingleAnnotation.class, "message"), String.class, null)); field(SingleAnnotation.class, "message"), String.class, null));
} }
@ -57,25 +57,25 @@ public class OverrideMetadataTests {
void forTestClassWithMultipleFields() { void forTestClassWithMultipleFields() {
List<OverrideMetadata> overrideMetadata = OverrideMetadata.forTestClass(MultipleAnnotations.class); List<OverrideMetadata> overrideMetadata = OverrideMetadata.forTestClass(MultipleAnnotations.class);
assertThat(overrideMetadata).hasSize(2) assertThat(overrideMetadata).hasSize(2)
.anySatisfy(hasTestBeanMetadata( .anySatisfy(hasOverrideMetadata(
field(MultipleAnnotations.class, "message"), String.class, null)) field(MultipleAnnotations.class, "message"), String.class, null))
.anySatisfy(hasTestBeanMetadata( .anySatisfy(hasOverrideMetadata(
field(MultipleAnnotations.class, "counter"), Integer.class, null)); field(MultipleAnnotations.class, "counter"), Integer.class, null));
} }
@Test @Test
void forTestClassWithMultipleFieldsSameMetadata() { void forTestClassWithMultipleFieldsWithIdenticalMetadata() {
List<OverrideMetadata> overrideMetadata = OverrideMetadata.forTestClass(MultipleAnnotationsDuplicate.class); List<OverrideMetadata> overrideMetadata = OverrideMetadata.forTestClass(MultipleAnnotationsDuplicate.class);
assertThat(overrideMetadata).hasSize(2) assertThat(overrideMetadata).hasSize(2)
.anySatisfy(hasTestBeanMetadata( .anySatisfy(hasOverrideMetadata(
field(MultipleAnnotationsDuplicate.class, "message1"), String.class, "messageBean")) field(MultipleAnnotationsDuplicate.class, "message1"), String.class, "messageBean"))
.anySatisfy(hasTestBeanMetadata( .anySatisfy(hasOverrideMetadata(
field(MultipleAnnotationsDuplicate.class, "message2"), String.class, "messageBean")); field(MultipleAnnotationsDuplicate.class, "message2"), String.class, "messageBean"));
assertThat(new HashSet<>(overrideMetadata)).hasSize(1); assertThat(new HashSet<>(overrideMetadata)).hasSize(1);
} }
@Test @Test
void forTestClassWithDifferentOverrideMetadataOnSameField() { void forTestClassWithCompetingBeanOverrideAnnotationsOnSameField() {
Field faultyField = field(MultipleAnnotationsOnSameField.class, "message"); Field faultyField = field(MultipleAnnotationsOnSameField.class, "message");
assertThatIllegalStateException() assertThatIllegalStateException()
.isThrownBy(() -> OverrideMetadata.forTestClass(MultipleAnnotationsOnSameField.class)) .isThrownBy(() -> OverrideMetadata.forTestClass(MultipleAnnotationsOnSameField.class))
@ -164,25 +164,27 @@ public class OverrideMetadataTests {
assertThat(metadata).isNotEqualTo(metadata2); assertThat(metadata).isNotEqualTo(metadata2);
} }
private OverrideMetadata createMetadata(Field field) { private static OverrideMetadata createMetadata(Field field) {
return createMetadata(field, null); return createMetadata(field, null);
} }
private OverrideMetadata createMetadata(Field field, @Nullable String name) { private static OverrideMetadata createMetadata(Field field, @Nullable String name) {
return new DummyOverrideMetadata(field, field.getType(), name, BeanOverrideStrategy.REPLACE_DEFINITION); return new DummyOverrideMetadata(field, field.getType(), name, BeanOverrideStrategy.REPLACE_DEFINITION);
} }
private Field field(Class<?> target, String fieldName) { private static Field field(Class<?> target, String fieldName) {
Field field = ReflectionUtils.findField(target, fieldName); Field field = ReflectionUtils.findField(target, fieldName);
assertThat(field).isNotNull(); assertThat(field).isNotNull();
return field; return field;
} }
private Consumer<OverrideMetadata> hasTestBeanMetadata(Field field, Class<?> beanType, @Nullable String beanName) { private static Consumer<OverrideMetadata> hasOverrideMetadata(Field field, Class<?> beanType, @Nullable String beanName) {
return hasOverrideMetadata(field, beanType, BeanOverrideStrategy.REPLACE_DEFINITION, beanName); return hasOverrideMetadata(field, beanType, BeanOverrideStrategy.REPLACE_DEFINITION, beanName);
} }
private Consumer<OverrideMetadata> hasOverrideMetadata(Field field, Class<?> beanType, BeanOverrideStrategy strategy, @Nullable String beanName) { private static Consumer<OverrideMetadata> hasOverrideMetadata(Field field, Class<?> beanType, BeanOverrideStrategy strategy,
@Nullable String beanName) {
return metadata -> { return metadata -> {
assertThat(metadata.getField()).isEqualTo(field); assertThat(metadata.getField()).isEqualTo(field);
assertThat(metadata.getBeanType().toClass()).isEqualTo(beanType); assertThat(metadata.getBeanType().toClass()).isEqualTo(beanType);
@ -196,7 +198,6 @@ public class OverrideMetadataTests {
@DummyBean @DummyBean
String message; String message;
} }
static class MultipleAnnotations { static class MultipleAnnotations {
@ -215,7 +216,6 @@ public class OverrideMetadataTests {
@DummyBean(beanName = "messageBean") @DummyBean(beanName = "messageBean")
String message2; String message2;
} }
static class MultipleAnnotationsOnSameField { static class MultipleAnnotationsOnSameField {
@ -229,37 +229,33 @@ public class OverrideMetadataTests {
} }
} }
public static class ConfigA { static class ConfigA {
private ExampleService noQualifier; ExampleService noQualifier;
@Qualifier("test") @Qualifier("test")
private ExampleService directQualifier; ExampleService directQualifier;
@Qualifier("different") @Qualifier("different")
private ExampleService differentDirectQualifier; ExampleService differentDirectQualifier;
@CustomQualifier @CustomQualifier
private ExampleService customQualifier; ExampleService customQualifier;
} }
public static class ConfigB { static class ConfigB {
private ExampleService noQualifier; ExampleService noQualifier;
private ExampleService example; ExampleService example;
@Qualifier("test") @Qualifier("test")
private ExampleService directQualifier; ExampleService directQualifier;
} }
// Simple OverrideMetadata implementation
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@DummyBean @DummyBean
public @interface MetaDummyBean {} @interface MetaDummyBean {}
} }

6
spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanContextCustomizerEqualityTests.java

@ -46,7 +46,7 @@ class TestBeanContextCustomizerEqualityTests {
} }
private ContextCustomizer createContextCustomizer(Class<?> testClass) { private static ContextCustomizer createContextCustomizer(Class<?> testClass) {
ContextCustomizer customizer = BeanOverrideContextCustomizerTestUtils.createContextCustomizer(testClass); ContextCustomizer customizer = BeanOverrideContextCustomizerTestUtils.createContextCustomizer(testClass);
assertThat(customizer).isNotNull(); assertThat(customizer).isNotNull();
return customizer; return customizer;
@ -89,7 +89,7 @@ class TestBeanContextCustomizerEqualityTests {
@TestBean @TestBean
private String description; private String description;
private static String description() { static String description() {
return "overridden"; return "overridden";
} }
} }
@ -99,7 +99,7 @@ class TestBeanContextCustomizerEqualityTests {
@TestBean(name = "descriptionBean") @TestBean(name = "descriptionBean")
private String description; private String description;
private static String description() { static String description() {
return "overridden"; return "overridden";
} }
} }

13
spring-test/src/test/java/org/springframework/test/context/bean/override/convention/TestBeanTests.java

@ -40,8 +40,8 @@ public class TestBeanTests {
assertThatIllegalStateException() assertThatIllegalStateException()
.isThrownBy(context::refresh) .isThrownBy(context::refresh)
.withMessage(""" .withMessage("""
Unable to override bean 'beanToOverride': there is no bean definition \ Unable to override bean: there is no bean definition \
to replace with that name of type java.lang.String"""); to replace with name [beanToOverride] and type [java.lang.String].""");
} }
@Test @Test
@ -78,9 +78,8 @@ public class TestBeanTests {
assertThatIllegalStateException() assertThatIllegalStateException()
.isThrownBy(context::refresh) .isThrownBy(context::refresh)
.withMessage(""" .withMessage("""
Unable to override bean 'beanToOverride': there is no bean definition \ Unable to override bean: there is no bean definition \
to replace with that name of type %s""".formatted( to replace with name [beanToOverride] and type [java.lang.String].""");
String.class.getName()));
} }
@Test @Test
@ -130,7 +129,7 @@ public class TestBeanTests {
@TestBean @TestBean
private String example; private String example;
private static String example() { static String example() {
throw new IllegalStateException("Should not be called"); throw new IllegalStateException("Should not be called");
} }
} }
@ -140,7 +139,7 @@ public class TestBeanTests {
@TestBean(name = "beanToOverride") @TestBean(name = "beanToOverride")
private String example; private String example;
private static String example() { static String example() {
throw new IllegalStateException("Should not be called"); throw new IllegalStateException("Should not be called");
} }
} }

Loading…
Cancel
Save