commit
fd4b7d7f7a
|
@ -22,6 +22,8 @@ import java.util.Set;
|
||||||
|
|
||||||
import org.mockito.Mockito;
|
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.NoSuchBeanDefinitionException;
|
||||||
import org.springframework.beans.factory.config.BeanDefinition;
|
import org.springframework.beans.factory.config.BeanDefinition;
|
||||||
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
|
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
|
||||||
|
@ -80,7 +82,7 @@ public class ResetMocksTestExecutionListener extends AbstractTestExecutionListen
|
||||||
BeanDefinition definition = beanFactory.getBeanDefinition(name);
|
BeanDefinition definition = beanFactory.getBeanDefinition(name);
|
||||||
if (definition.isSingleton() && instantiatedSingletons.contains(name)) {
|
if (definition.isSingleton() && instantiatedSingletons.contains(name)) {
|
||||||
Object bean = getBean(beanFactory, name);
|
Object bean = getBean(beanFactory, name);
|
||||||
if (reset.equals(MockReset.get(bean))) {
|
if (bean != null && reset.equals(MockReset.get(bean))) {
|
||||||
Mockito.reset(bean);
|
Mockito.reset(bean);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -103,11 +105,25 @@ public class ResetMocksTestExecutionListener extends AbstractTestExecutionListen
|
||||||
|
|
||||||
private Object getBean(ConfigurableListableBeanFactory beanFactory, String name) {
|
private Object getBean(ConfigurableListableBeanFactory beanFactory, String name) {
|
||||||
try {
|
try {
|
||||||
return beanFactory.getBean(name);
|
if (isStandardBeanOrSingletonFactoryBean(beanFactory, name)) {
|
||||||
|
return beanFactory.getBean(name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,6 +53,7 @@ class ResetMocksTestExecutionListenerTests {
|
||||||
given(getMock("before").greeting()).willReturn("before");
|
given(getMock("before").greeting()).willReturn("before");
|
||||||
given(getMock("after").greeting()).willReturn("after");
|
given(getMock("after").greeting()).willReturn("after");
|
||||||
given(getMock("fromFactoryBean").greeting()).willReturn("fromFactoryBean");
|
given(getMock("fromFactoryBean").greeting()).willReturn("fromFactoryBean");
|
||||||
|
assertThat(this.context.getBean(NonSingletonFactoryBean.class).getObjectInvocations).isEqualTo(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -61,6 +62,7 @@ class ResetMocksTestExecutionListenerTests {
|
||||||
assertThat(getMock("before").greeting()).isNull();
|
assertThat(getMock("before").greeting()).isNull();
|
||||||
assertThat(getMock("after").greeting()).isNull();
|
assertThat(getMock("after").greeting()).isNull();
|
||||||
assertThat(getMock("fromFactoryBean").greeting()).isNull();
|
assertThat(getMock("fromFactoryBean").greeting()).isNull();
|
||||||
|
assertThat(this.context.getBean(NonSingletonFactoryBean.class).getObjectInvocations).isEqualTo(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
ExampleService getMock(String name) {
|
ExampleService getMock(String name) {
|
||||||
|
@ -109,6 +111,11 @@ class ResetMocksTestExecutionListenerTests {
|
||||||
return new WorkingFactoryBean();
|
return new WorkingFactoryBean();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
NonSingletonFactoryBean nonSingletonFactoryBean() {
|
||||||
|
return new NonSingletonFactoryBean();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static class BrokenFactoryBean implements FactoryBean<String> {
|
static class BrokenFactoryBean implements FactoryBean<String> {
|
||||||
|
@ -132,9 +139,11 @@ class ResetMocksTestExecutionListenerTests {
|
||||||
|
|
||||||
static class WorkingFactoryBean implements FactoryBean<ExampleService> {
|
static class WorkingFactoryBean implements FactoryBean<ExampleService> {
|
||||||
|
|
||||||
|
private final ExampleService service = mock(ExampleService.class, MockReset.before());
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ExampleService getObject() {
|
public ExampleService getObject() {
|
||||||
return mock(ExampleService.class, MockReset.before());
|
return this.service;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -149,4 +158,26 @@ class ResetMocksTestExecutionListenerTests {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static class NonSingletonFactoryBean implements FactoryBean<ExampleService> {
|
||||||
|
|
||||||
|
private int getObjectInvocations = 0;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExampleService getObject() {
|
||||||
|
this.getObjectInvocations++;
|
||||||
|
return mock(ExampleService.class, MockReset.before());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<?> getObjectType() {
|
||||||
|
return ExampleService.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSingleton() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue