Skip to content

Commit ce96cc3

Browse files
committed
Merge branch '2.7.x' into 3.0.x
Closes gh-35329
2 parents fd864c3 + 6dc84b1 commit ce96cc3

File tree

2 files changed

+51
-4
lines changed

2 files changed

+51
-4
lines changed

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

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
import org.mockito.Mockito;
2424

25+
import org.springframework.beans.factory.BeanFactory;
26+
import org.springframework.beans.factory.FactoryBean;
2527
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
2628
import org.springframework.beans.factory.config.BeanDefinition;
2729
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
@@ -80,7 +82,7 @@ private void resetMocks(ConfigurableApplicationContext applicationContext, MockR
8082
BeanDefinition definition = beanFactory.getBeanDefinition(name);
8183
if (definition.isSingleton() && instantiatedSingletons.contains(name)) {
8284
Object bean = getBean(beanFactory, name);
83-
if (reset.equals(MockReset.get(bean))) {
85+
if (bean != null && reset.equals(MockReset.get(bean))) {
8486
Mockito.reset(bean);
8587
}
8688
}
@@ -103,11 +105,25 @@ private void resetMocks(ConfigurableApplicationContext applicationContext, MockR
103105

104106
private Object getBean(ConfigurableListableBeanFactory beanFactory, String name) {
105107
try {
106-
return beanFactory.getBean(name);
108+
if (isStandardBeanOrSingletonFactoryBean(beanFactory, name)) {
109+
return beanFactory.getBean(name);
110+
}
107111
}
108112
catch (Exception ex) {
109-
return beanFactory.getSingleton(name);
113+
// Continue
114+
}
115+
return beanFactory.getSingleton(name);
116+
}
117+
118+
private boolean isStandardBeanOrSingletonFactoryBean(ConfigurableListableBeanFactory beanFactory, String name) {
119+
String factoryBeanName = BeanFactory.FACTORY_BEAN_PREFIX + name;
120+
if (beanFactory.containsBean(factoryBeanName)) {
121+
FactoryBean<?> factoryBean = (FactoryBean<?>) beanFactory.getBean(factoryBeanName);
122+
if (!factoryBean.isSingleton()) {
123+
return false;
124+
}
110125
}
126+
return true;
111127
}
112128

113129
}

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

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ void test001() {
5353
given(getMock("before").greeting()).willReturn("before");
5454
given(getMock("after").greeting()).willReturn("after");
5555
given(getMock("fromFactoryBean").greeting()).willReturn("fromFactoryBean");
56+
assertThat(this.context.getBean(NonSingletonFactoryBean.class).getObjectInvocations).isEqualTo(0);
5657
}
5758

5859
@Test
@@ -61,6 +62,7 @@ void test002() {
6162
assertThat(getMock("before").greeting()).isNull();
6263
assertThat(getMock("after").greeting()).isNull();
6364
assertThat(getMock("fromFactoryBean").greeting()).isNull();
65+
assertThat(this.context.getBean(NonSingletonFactoryBean.class).getObjectInvocations).isEqualTo(0);
6466
}
6567

6668
ExampleService getMock(String name) {
@@ -109,6 +111,11 @@ WorkingFactoryBean fromFactoryBean() {
109111
return new WorkingFactoryBean();
110112
}
111113

114+
@Bean
115+
NonSingletonFactoryBean nonSingletonFactoryBean() {
116+
return new NonSingletonFactoryBean();
117+
}
118+
112119
}
113120

114121
static class BrokenFactoryBean implements FactoryBean<String> {
@@ -132,9 +139,11 @@ public boolean isSingleton() {
132139

133140
static class WorkingFactoryBean implements FactoryBean<ExampleService> {
134141

142+
private final ExampleService service = mock(ExampleService.class, MockReset.before());
143+
135144
@Override
136145
public ExampleService getObject() {
137-
return mock(ExampleService.class, MockReset.before());
146+
return this.service;
138147
}
139148

140149
@Override
@@ -149,4 +158,26 @@ public boolean isSingleton() {
149158

150159
}
151160

161+
static class NonSingletonFactoryBean implements FactoryBean<ExampleService> {
162+
163+
private int getObjectInvocations = 0;
164+
165+
@Override
166+
public ExampleService getObject() {
167+
this.getObjectInvocations++;
168+
return mock(ExampleService.class, MockReset.before());
169+
}
170+
171+
@Override
172+
public Class<?> getObjectType() {
173+
return ExampleService.class;
174+
}
175+
176+
@Override
177+
public boolean isSingleton() {
178+
return false;
179+
}
180+
181+
}
182+
152183
}

0 commit comments

Comments
 (0)