Skip to content

Commit ff9b767

Browse files
committed
Polish Bean Override internals and tests
1 parent 7995665 commit ff9b767

File tree

10 files changed

+107
-67
lines changed

10 files changed

+107
-67
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,8 @@ public boolean equals(Object other) {
243243
!Objects.equals(this.strategy, that.strategy)) {
244244
return false;
245245
}
246+
247+
// by-name lookup
246248
if (this.beanName != null) {
247249
return true;
248250
}

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2024 the original author or authors.
2+
* Copyright 2002-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -109,8 +109,7 @@ Object wrapBeanIfNecessary(Object bean, String beanName) {
109109

110110
void inject(Object target, BeanOverrideHandler handler) {
111111
String beanName = this.handlerToBeanNameMap.get(handler);
112-
Assert.state(StringUtils.hasLength(beanName),
113-
() -> "No bean found for BeanOverrideHandler: " + handler);
112+
Assert.state(StringUtils.hasLength(beanName), () -> "No bean found for BeanOverrideHandler: " + handler);
114113
inject(handler.getField(), target, beanName);
115114
}
116115

spring-test/src/main/java/org/springframework/test/context/bean/override/mockito/MockBeans.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2024 the original author or authors.
2+
* Copyright 2002-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2024 the original author or authors.
2+
* Copyright 2002-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -395,7 +395,7 @@ private void qualifiedElementIsField(RootBeanDefinition def) {
395395

396396
private static AnnotationConfigApplicationContext createContext(Class<?> testClass) {
397397
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
398-
Set<BeanOverrideHandler> handlers = new LinkedHashSet<>(BeanOverrideHandler.forTestClass(testClass));
398+
Set<BeanOverrideHandler> handlers = new LinkedHashSet<>(BeanOverrideTestUtils.findHandlers(testClass));
399399
new BeanOverrideContextCustomizer(handlers).customizeContext(context, mock(MergedContextConfiguration.class));
400400
return context;
401401
}

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2024 the original author or authors.
2+
* Copyright 2002-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -51,14 +51,14 @@ class BeanOverrideHandlerTests {
5151

5252
@Test
5353
void forTestClassWithSingleField() {
54-
List<BeanOverrideHandler> handlers = BeanOverrideHandler.forTestClass(SingleAnnotation.class);
54+
List<BeanOverrideHandler> handlers = BeanOverrideTestUtils.findHandlers(SingleAnnotation.class);
5555
assertThat(handlers).singleElement().satisfies(hasBeanOverrideHandler(
5656
field(SingleAnnotation.class, "message"), String.class, null));
5757
}
5858

5959
@Test
6060
void forTestClassWithMultipleFields() {
61-
List<BeanOverrideHandler> handlers = BeanOverrideHandler.forTestClass(MultipleAnnotations.class);
61+
List<BeanOverrideHandler> handlers = BeanOverrideTestUtils.findHandlers(MultipleAnnotations.class);
6262
assertThat(handlers).hasSize(2)
6363
.anySatisfy(hasBeanOverrideHandler(
6464
field(MultipleAnnotations.class, "message"), String.class, null))
@@ -68,7 +68,7 @@ void forTestClassWithMultipleFields() {
6868

6969
@Test
7070
void forTestClassWithMultipleFieldsWithIdenticalMetadata() {
71-
List<BeanOverrideHandler> handlers = BeanOverrideHandler.forTestClass(MultipleAnnotationsDuplicate.class);
71+
List<BeanOverrideHandler> handlers = BeanOverrideTestUtils.findHandlers(MultipleAnnotationsDuplicate.class);
7272
assertThat(handlers).hasSize(2)
7373
.anySatisfy(hasBeanOverrideHandler(
7474
field(MultipleAnnotationsDuplicate.class, "message1"), String.class, "messageBean"))
@@ -81,7 +81,7 @@ void forTestClassWithMultipleFieldsWithIdenticalMetadata() {
8181
void forTestClassWithCompetingBeanOverrideAnnotationsOnSameField() {
8282
Field faultyField = field(MultipleAnnotationsOnSameField.class, "message");
8383
assertThatIllegalStateException()
84-
.isThrownBy(() -> BeanOverrideHandler.forTestClass(MultipleAnnotationsOnSameField.class))
84+
.isThrownBy(() -> BeanOverrideTestUtils.findHandlers(MultipleAnnotationsOnSameField.class))
8585
.withMessageStartingWith("Multiple @BeanOverride annotations found")
8686
.withMessageContaining(faultyField.toString());
8787
}
@@ -90,7 +90,7 @@ void forTestClassWithCompetingBeanOverrideAnnotationsOnSameField() {
9090
void forTestClassWithStaticBeanOverrideField() {
9191
Field staticField = field(StaticBeanOverrideField.class, "message");
9292
assertThatIllegalStateException()
93-
.isThrownBy(() -> BeanOverrideHandler.forTestClass(StaticBeanOverrideField.class))
93+
.isThrownBy(() -> BeanOverrideTestUtils.findHandlers(StaticBeanOverrideField.class))
9494
.withMessage("@BeanOverride field must not be static: " + staticField);
9595
}
9696

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Copyright 2002-2025 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.test.context.bean.override;
18+
19+
import java.util.List;
20+
21+
/**
22+
* Test utilities for Bean Overrides.
23+
*
24+
* @author Sam Brannen
25+
* @since 6.2.2
26+
*/
27+
public abstract class BeanOverrideTestUtils {
28+
29+
public static List<BeanOverrideHandler> findHandlers(Class<?> testClass) {
30+
return BeanOverrideHandler.forTestClass(testClass);
31+
}
32+
33+
}

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2024 the original author or authors.
2+
* Copyright 2002-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -26,6 +26,7 @@
2626
import org.springframework.core.ResolvableType;
2727
import org.springframework.test.context.bean.override.BeanOverrideHandler;
2828
import org.springframework.test.context.bean.override.BeanOverrideStrategy;
29+
import org.springframework.test.context.bean.override.BeanOverrideTestUtils;
2930
import org.springframework.util.ReflectionUtils;
3031
import org.springframework.util.StringUtils;
3132

@@ -42,21 +43,21 @@
4243
class TestBeanOverrideHandlerTests {
4344

4445
@Test
45-
void setsBeanNameToNullIfAnnotationNameIsNull() {
46-
List<BeanOverrideHandler> handlers = BeanOverrideHandler.forTestClass(SampleOneOverride.class);
46+
void beanNameIsSetToNullIfAnnotationNameIsEmpty() {
47+
List<BeanOverrideHandler> handlers = BeanOverrideTestUtils.findHandlers(SampleOneOverride.class);
4748
assertThat(handlers).singleElement().extracting(BeanOverrideHandler::getBeanName).isNull();
4849
}
4950

5051
@Test
51-
void setsBeanNameToAnnotationName() {
52-
List<BeanOverrideHandler> handlers = BeanOverrideHandler.forTestClass(SampleOneOverrideWithName.class);
52+
void beanNameIsSetToAnnotationName() {
53+
List<BeanOverrideHandler> handlers = BeanOverrideTestUtils.findHandlers(SampleOneOverrideWithName.class);
5354
assertThat(handlers).singleElement().extracting(BeanOverrideHandler::getBeanName).isEqualTo("anotherBean");
5455
}
5556

5657
@Test
5758
void failsWithMissingMethod() {
5859
assertThatIllegalStateException()
59-
.isThrownBy(() -> BeanOverrideHandler.forTestClass(SampleMissingMethod.class))
60+
.isThrownBy(() -> BeanOverrideTestUtils.findHandlers(SampleMissingMethod.class))
6061
.withMessage("No static method found named message() in %s with return type %s",
6162
SampleMissingMethod.class.getName(), String.class.getName());
6263
}

spring-test/src/test/java/org/springframework/test/context/bean/override/mockito/MockitoBeanOverrideHandlerTests.java

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.core.ResolvableType;
2727
import org.springframework.core.annotation.AnnotatedElementUtils;
2828
import org.springframework.test.context.bean.override.BeanOverrideHandler;
29+
import org.springframework.test.context.bean.override.BeanOverrideTestUtils;
2930
import org.springframework.util.ReflectionUtils;
3031

3132
import static org.assertj.core.api.Assertions.assertThat;
@@ -34,87 +35,89 @@
3435
* Tests for {@link MockitoBeanOverrideHandler}.
3536
*
3637
* @author Stephane Nicoll
38+
* @author Sam Brannen
39+
* @since 6.2
3740
*/
3841
class MockitoBeanOverrideHandlerTests {
3942

4043
@Test
41-
void forTestClassSetsNameToNullIfAnnotationNameIsNull() {
42-
List<BeanOverrideHandler> list = BeanOverrideHandler.forTestClass(SampleOneMock.class);
44+
void beanNameIsSetToNullIfAnnotationNameIsEmpty() {
45+
List<BeanOverrideHandler> list = BeanOverrideTestUtils.findHandlers(SampleOneMock.class);
4346
assertThat(list).singleElement().satisfies(handler -> assertThat(handler.getBeanName()).isNull());
4447
}
4548

4649
@Test
47-
void forTestClassSetsNameToAnnotationName() {
48-
List<BeanOverrideHandler> list = BeanOverrideHandler.forTestClass(SampleOneMockWithName.class);
50+
void beanNameIsSetToAnnotationName() {
51+
List<BeanOverrideHandler> list = BeanOverrideTestUtils.findHandlers(SampleOneMockWithName.class);
4952
assertThat(list).singleElement().satisfies(handler -> assertThat(handler.getBeanName()).isEqualTo("anotherService"));
5053
}
5154

5255
@Test
53-
void isEqualToWithSameInstance() {
54-
MockitoBeanOverrideHandler handler = createBeanOverrideHandler(sampleField("service"));
56+
void isEqualToWithSameInstanceFromField() {
57+
MockitoBeanOverrideHandler handler = createHandler(sampleField("service"));
5558
assertThat(handler).isEqualTo(handler);
5659
assertThat(handler).hasSameHashCodeAs(handler);
5760
}
5861

5962
@Test
60-
void isEqualToWithSameMetadata() {
61-
MockitoBeanOverrideHandler handler1 = createBeanOverrideHandler(sampleField("service"));
62-
MockitoBeanOverrideHandler handler2 = createBeanOverrideHandler(sampleField("service"));
63+
void isEqualToWithSameMetadataFromField() {
64+
MockitoBeanOverrideHandler handler1 = createHandler(sampleField("service"));
65+
MockitoBeanOverrideHandler handler2 = createHandler(sampleField("service"));
6366
assertThat(handler1).isEqualTo(handler2);
6467
assertThat(handler1).hasSameHashCodeAs(handler2);
6568
}
6669

6770
@Test
6871
void isNotEqualEqualToByTypeLookupWithSameMetadataButDifferentField() {
69-
MockitoBeanOverrideHandler handler1 = createBeanOverrideHandler(sampleField("service"));
70-
MockitoBeanOverrideHandler handler2 = createBeanOverrideHandler(sampleField("service2"));
72+
MockitoBeanOverrideHandler handler1 = createHandler(sampleField("service"));
73+
MockitoBeanOverrideHandler handler2 = createHandler(sampleField("service2"));
7174
assertThat(handler1).isNotEqualTo(handler2);
7275
}
7376

7477
@Test
7578
void isEqualEqualToByNameLookupWithSameMetadataButDifferentField() {
76-
MockitoBeanOverrideHandler handler1 = createBeanOverrideHandler(sampleField("service3"));
77-
MockitoBeanOverrideHandler handler2 = createBeanOverrideHandler(sampleField("service4"));
79+
MockitoBeanOverrideHandler handler1 = createHandler(sampleField("service3"));
80+
MockitoBeanOverrideHandler handler2 = createHandler(sampleField("service4"));
7881
assertThat(handler1).isEqualTo(handler2);
7982
assertThat(handler1).hasSameHashCodeAs(handler2);
8083
}
8184

8285
@Test
8386
void isNotEqualToWithSameMetadataButDifferentBeanName() {
84-
MockitoBeanOverrideHandler handler1 = createBeanOverrideHandler(sampleField("service"));
85-
MockitoBeanOverrideHandler handler2 = createBeanOverrideHandler(sampleField("service3"));
87+
MockitoBeanOverrideHandler handler1 = createHandler(sampleField("service"));
88+
MockitoBeanOverrideHandler handler2 = createHandler(sampleField("service3"));
8689
assertThat(handler1).isNotEqualTo(handler2);
8790
}
8891

8992
@Test
9093
void isNotEqualToWithSameMetadataButDifferentExtraInterfaces() {
91-
MockitoBeanOverrideHandler handler1 = createBeanOverrideHandler(sampleField("service"));
92-
MockitoBeanOverrideHandler handler2 = createBeanOverrideHandler(sampleField("service5"));
94+
MockitoBeanOverrideHandler handler1 = createHandler(sampleField("service"));
95+
MockitoBeanOverrideHandler handler2 = createHandler(sampleField("service5"));
9396
assertThat(handler1).isNotEqualTo(handler2);
9497
}
9598

9699
@Test
97100
void isNotEqualToWithSameMetadataButDifferentAnswers() {
98-
MockitoBeanOverrideHandler handler1 = createBeanOverrideHandler(sampleField("service"));
99-
MockitoBeanOverrideHandler handler2 = createBeanOverrideHandler(sampleField("service6"));
101+
MockitoBeanOverrideHandler handler1 = createHandler(sampleField("service"));
102+
MockitoBeanOverrideHandler handler2 = createHandler(sampleField("service6"));
100103
assertThat(handler1).isNotEqualTo(handler2);
101104
}
102105

103106
@Test
104107
void isNotEqualToWithSameMetadataButDifferentSerializableFlag() {
105-
MockitoBeanOverrideHandler handler1 = createBeanOverrideHandler(sampleField("service"));
106-
MockitoBeanOverrideHandler handler2 = createBeanOverrideHandler(sampleField("service7"));
108+
MockitoBeanOverrideHandler handler1 = createHandler(sampleField("service"));
109+
MockitoBeanOverrideHandler handler2 = createHandler(sampleField("service7"));
107110
assertThat(handler1).isNotEqualTo(handler2);
108111
}
109112

110113

111-
private Field sampleField(String fieldName) {
114+
private static Field sampleField(String fieldName) {
112115
Field field = ReflectionUtils.findField(Sample.class, fieldName);
113116
assertThat(field).isNotNull();
114117
return field;
115118
}
116119

117-
private MockitoBeanOverrideHandler createBeanOverrideHandler(Field field) {
120+
private static MockitoBeanOverrideHandler createHandler(Field field) {
118121
MockitoBean annotation = AnnotatedElementUtils.getMergedAnnotation(field, MockitoBean.class);
119122
return new MockitoBeanOverrideHandler(field, ResolvableType.forClass(field.getType()), annotation);
120123
}
@@ -124,14 +127,12 @@ static class SampleOneMock {
124127

125128
@MockitoBean
126129
String service;
127-
128130
}
129131

130132
static class SampleOneMockWithName {
131133

132134
@MockitoBean("anotherService")
133135
String service;
134-
135136
}
136137

137138
static class Sample {
@@ -156,7 +157,6 @@ static class Sample {
156157

157158
@MockitoBean(serializable = true)
158159
private String service7;
159-
160160
}
161161

162162
}

0 commit comments

Comments
 (0)