Browse Source

Test that a broken factory bean does not break resetting of mocks

Previously, ResetMocksTestExecutionListener used getBean(name) to
retrieve each instantiated singleton. When the instantiated singleton
was a factory bean, this would cause getObject on the factory bean to
be called. If the factory bean was unable to produce its object, for
example due to test slicing excluding something, an exception would
be thrown.

The previous commit updated ResetMocksTestsExecutionListener to
use getSingleton(name) rather than getBean(name).  This will retrieve
the factory bean itself rather than causing the factory bean to
attempt to create an object. This commit updates the tests to verify
the new behaviour.

Closes gh-7270
pull/7529/head
Andy Wilkinson 9 years ago
parent
commit
46e8cf4a43
  1. 27
      spring-boot-test/src/test/java/org/springframework/boot/test/mock/mockito/ResetMocksTestExecutionListenerTests.java

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

@ -21,6 +21,7 @@ import org.junit.Test; @@ -21,6 +21,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.mock.mockito.example.ExampleService;
import org.springframework.context.ApplicationContext;
@ -37,6 +38,7 @@ import static org.mockito.Mockito.mock; @@ -37,6 +38,7 @@ import static org.mockito.Mockito.mock;
* Tests for {@link ResetMocksTestExecutionListener}.
*
* @author Phillip Webb
* @author Andy Wilkinson
*/
@RunWith(SpringRunner.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@ -94,6 +96,31 @@ public class ResetMocksTestExecutionListenerTests { @@ -94,6 +96,31 @@ public class ResetMocksTestExecutionListenerTests {
throw new RuntimeException();
}
@Bean
public BrokenFactoryBean brokenFactoryBean() {
// gh-7270
return new BrokenFactoryBean();
}
}
static class BrokenFactoryBean implements FactoryBean<String> {
@Override
public String getObject() throws Exception {
throw new IllegalStateException();
}
@Override
public Class<?> getObjectType() {
return String.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
}

Loading…
Cancel
Save