Skip to content

Commit bdb7fdc

Browse files
committed
Merge branch '3.0.x' into 3.1.x
Closes gh-36230
2 parents 480049e + 581c263 commit bdb7fdc

File tree

2 files changed

+35
-5
lines changed

2 files changed

+35
-5
lines changed

spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/mock/mockito/MockitoPostProcessor.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -248,18 +248,22 @@ private Set<String> getExistingBeans(ConfigurableListableBeanFactory beanFactory
248248
return candidates;
249249
}
250250

251-
private Set<String> getExistingBeans(ConfigurableListableBeanFactory beanFactory, ResolvableType type) {
252-
Set<String> beans = new LinkedHashSet<>(Arrays.asList(beanFactory.getBeanNamesForType(type, true, false)));
253-
String typeName = type.resolve(Object.class).getName();
251+
private Set<String> getExistingBeans(ConfigurableListableBeanFactory beanFactory, ResolvableType resolvableType) {
252+
Set<String> beans = new LinkedHashSet<>(
253+
Arrays.asList(beanFactory.getBeanNamesForType(resolvableType, true, false)));
254+
Class<?> type = resolvableType.resolve(Object.class);
255+
String typeName = type.getName();
254256
for (String beanName : beanFactory.getBeanNamesForType(FactoryBean.class, true, false)) {
255257
beanName = BeanFactoryUtils.transformedBeanName(beanName);
256258
BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
257-
if (typeName.equals(beanDefinition.getAttribute(FactoryBean.OBJECT_TYPE_ATTRIBUTE))) {
259+
Object attribute = beanDefinition.getAttribute(FactoryBean.OBJECT_TYPE_ATTRIBUTE);
260+
if (resolvableType.equals(attribute) || type.equals(attribute) || typeName.equals(attribute)) {
258261
beans.add(beanName);
259262
}
260263
}
261264
beans.removeIf(this::isScopedTarget);
262265
return beans;
266+
263267
}
264268

265269
private boolean isScopedTarget(String beanName) {

spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/mock/mockito/MockitoPostProcessorTests.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.springframework.context.annotation.Configuration;
3737
import org.springframework.context.annotation.Primary;
3838
import org.springframework.core.Ordered;
39+
import org.springframework.core.ResolvableType;
3940
import org.springframework.test.util.ReflectionTestUtils;
4041
import org.springframework.util.Assert;
4142

@@ -73,7 +74,7 @@ void cannotMockMultipleQualifiedBeans() {
7374
}
7475

7576
@Test
76-
void canMockBeanProducedByFactoryBeanWithObjectTypeAttribute() {
77+
void canMockBeanProducedByFactoryBeanWithStringObjectTypeAttribute() {
7778
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
7879
MockitoPostProcessor.register(context);
7980
RootBeanDefinition factoryBeanDefinition = new RootBeanDefinition(TestFactoryBean.class);
@@ -84,6 +85,31 @@ void canMockBeanProducedByFactoryBeanWithObjectTypeAttribute() {
8485
assertThat(Mockito.mockingDetails(context.getBean("beanToBeMocked")).isMock()).isTrue();
8586
}
8687

88+
@Test
89+
void canMockBeanProducedByFactoryBeanWithClassObjectTypeAttribute() {
90+
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
91+
MockitoPostProcessor.register(context);
92+
RootBeanDefinition factoryBeanDefinition = new RootBeanDefinition(TestFactoryBean.class);
93+
factoryBeanDefinition.setAttribute(FactoryBean.OBJECT_TYPE_ATTRIBUTE, SomeInterface.class);
94+
context.registerBeanDefinition("beanToBeMocked", factoryBeanDefinition);
95+
context.register(MockedFactoryBean.class);
96+
context.refresh();
97+
assertThat(Mockito.mockingDetails(context.getBean("beanToBeMocked")).isMock()).isTrue();
98+
}
99+
100+
@Test
101+
void canMockBeanProducedByFactoryBeanWithResolvableTypeObjectTypeAttribute() {
102+
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
103+
MockitoPostProcessor.register(context);
104+
RootBeanDefinition factoryBeanDefinition = new RootBeanDefinition(TestFactoryBean.class);
105+
ResolvableType objectType = ResolvableType.forClass(SomeInterface.class);
106+
factoryBeanDefinition.setAttribute(FactoryBean.OBJECT_TYPE_ATTRIBUTE, objectType);
107+
context.registerBeanDefinition("beanToBeMocked", factoryBeanDefinition);
108+
context.register(MockedFactoryBean.class);
109+
context.refresh();
110+
assertThat(Mockito.mockingDetails(context.getBean("beanToBeMocked")).isMock()).isTrue();
111+
}
112+
87113
@Test
88114
void canMockPrimaryBean() {
89115
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();

0 commit comments

Comments
 (0)