Merge branch '3.0.x'

Closes gh-35330
This commit is contained in:
Andy Wilkinson
2023-05-05 18:22:20 +01:00
2 changed files with 51 additions and 4 deletions

View File

@@ -22,6 +22,8 @@ import java.util.Set;
import org.mockito.Mockito;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
@@ -80,7 +82,7 @@ public class ResetMocksTestExecutionListener extends AbstractTestExecutionListen
BeanDefinition definition = beanFactory.getBeanDefinition(name);
if (definition.isSingleton() && instantiatedSingletons.contains(name)) {
Object bean = getBean(beanFactory, name);
if (reset.equals(MockReset.get(bean))) {
if (bean != null && reset.equals(MockReset.get(bean))) {
Mockito.reset(bean);
}
}
@@ -103,11 +105,25 @@ public class ResetMocksTestExecutionListener extends AbstractTestExecutionListen
private Object getBean(ConfigurableListableBeanFactory beanFactory, String name) {
try {
return beanFactory.getBean(name);
if (isStandardBeanOrSingletonFactoryBean(beanFactory, name)) {
return beanFactory.getBean(name);
}
}
catch (Exception ex) {
return beanFactory.getSingleton(name);
// Continue
}
return beanFactory.getSingleton(name);
}
private boolean isStandardBeanOrSingletonFactoryBean(ConfigurableListableBeanFactory beanFactory, String name) {
String factoryBeanName = BeanFactory.FACTORY_BEAN_PREFIX + name;
if (beanFactory.containsBean(factoryBeanName)) {
FactoryBean<?> factoryBean = (FactoryBean<?>) beanFactory.getBean(factoryBeanName);
if (!factoryBean.isSingleton()) {
return false;
}
}
return true;
}
}