/** * Creates a new {@link TestContextManager} for the supplied test class. * <p> * Can be overridden by subclasses. * * @param clazz * the test class to be managed */ @Override protected TestContextManager createTestContextManager(final Class<?> clazz) { return new TestContextManager(clazz) { @Override public void beforeTestClass() throws Exception { super.beforeTestClass(); } @Override public void afterTestClass() throws Exception { // If we aren't caching the Spring context them mark it dirty so // it is destroyed. if (!cacheSpringContext) { final TestContext testContext = getTestContext(); testContext.markApplicationContextDirty(HierarchyMode.EXHAUSTIVE); testContext.setAttribute(DependencyInjectionTestExecutionListener.REINJECT_DEPENDENCIES_ATTRIBUTE, Boolean.TRUE); } super.afterTestClass(); } }; }
@Override public void afterTestMethod(TestContext testContext) { if (Boolean.TRUE.equals(testContext.getAttribute(DependencyInjectionTestExecutionListener.REINJECT_DEPENDENCIES_ATTRIBUTE))) { logger.debug("Cleaning and reloading server for test context [{}].", testContext); cleanServer(); startServer(testContext); } }
@Test public void defaultListeners() { List<Class<?>> expected = asList(ServletTestExecutionListener.class, DirtiesContextBeforeModesTestExecutionListener.class, DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class, TransactionalTestExecutionListener.class, SqlScriptsTestExecutionListener.class); assertRegisteredListeners(DefaultListenersTestCase.class, expected); }
/** * @since 4.1 */ @Test public void defaultListenersMergedWithCustomListenerPrepended() { List<Class<?>> expected = asList(QuuxTestExecutionListener.class, ServletTestExecutionListener.class, DirtiesContextBeforeModesTestExecutionListener.class, DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class, TransactionalTestExecutionListener.class, SqlScriptsTestExecutionListener.class); assertRegisteredListeners(MergedDefaultListenersWithCustomListenerPrependedTestCase.class, expected); }
/** * @since 4.1 */ @Test public void defaultListenersMergedWithCustomListenerAppended() { List<Class<?>> expected = asList(ServletTestExecutionListener.class, DirtiesContextBeforeModesTestExecutionListener.class, DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class, TransactionalTestExecutionListener.class, SqlScriptsTestExecutionListener.class, BazTestExecutionListener.class); assertRegisteredListeners(MergedDefaultListenersWithCustomListenerAppendedTestCase.class, expected); }
/** * @since 4.1 */ @Test public void defaultListenersMergedWithCustomListenerInserted() { List<Class<?>> expected = asList(ServletTestExecutionListener.class, DirtiesContextBeforeModesTestExecutionListener.class, DependencyInjectionTestExecutionListener.class, BarTestExecutionListener.class, DirtiesContextTestExecutionListener.class, TransactionalTestExecutionListener.class, SqlScriptsTestExecutionListener.class); assertRegisteredListeners(MergedDefaultListenersWithCustomListenerInsertedTestCase.class, expected); }
@Test public void orderShouldBeBeforeDependencyInjectionTestExecutionListener() throws Exception { Ordered injectionListener = new DependencyInjectionTestExecutionListener(); assertThat(this.reportListener.getOrder()) .isLessThan(injectionListener.getOrder()); }
public MiniumRhinoTestContextManager(Class<?> testClass) { super(testClass); this.registerTestExecutionListeners(new DependencyInjectionTestExecutionListener()); }
/** * If the {@link #RESET_REQUEST_CONTEXT_HOLDER_ATTRIBUTE} in the supplied * {@code TestContext} has a value of {@link Boolean#TRUE}, this method will * (1) clean up thread-local state after each test method by {@linkplain * RequestContextHolder#resetRequestAttributes() resetting} Spring Web's * {@code RequestContextHolder} and (2) ensure that new mocks are injected * into the test instance for subsequent tests by setting the * {@link DependencyInjectionTestExecutionListener#REINJECT_DEPENDENCIES_ATTRIBUTE} * in the test context to {@code true}. * * <p>The {@link #RESET_REQUEST_CONTEXT_HOLDER_ATTRIBUTE} and * {@link #POPULATED_REQUEST_CONTEXT_HOLDER_ATTRIBUTE} will be subsequently * removed from the test context, regardless of their values. * * @see TestExecutionListener#afterTestMethod(TestContext) */ @Override public void afterTestMethod(TestContext testContext) throws Exception { if (Boolean.TRUE.equals(testContext.getAttribute(RESET_REQUEST_CONTEXT_HOLDER_ATTRIBUTE))) { if (logger.isDebugEnabled()) { logger.debug(String.format("Resetting RequestContextHolder for test context %s.", testContext)); } RequestContextHolder.resetRequestAttributes(); testContext.setAttribute(DependencyInjectionTestExecutionListener.REINJECT_DEPENDENCIES_ATTRIBUTE, Boolean.TRUE); } testContext.removeAttribute(POPULATED_REQUEST_CONTEXT_HOLDER_ATTRIBUTE); testContext.removeAttribute(RESET_REQUEST_CONTEXT_HOLDER_ATTRIBUTE); }
/** * If the {@link #RESET_REQUEST_CONTEXT_HOLDER_ATTRIBUTE} in the supplied * {@code TestContext} has a value of {@link Boolean#TRUE}, this method will * (1) clean up thread-local state after each test method by {@linkplain * RequestContextHolder#resetRequestAttributes() resetting} Spring Web's * {@code RequestContextHolder} and (2) ensure that new mocks are injected * into the test instance for subsequent tests by setting the * {@link DependencyInjectionTestExecutionListener#REINJECT_DEPENDENCIES_ATTRIBUTE} * in the test context to {@code true}. * * <p>The {@link #RESET_REQUEST_CONTEXT_HOLDER_ATTRIBUTE} and * {@link #POPULATED_REQUEST_CONTEXT_HOLDER_ATTRIBUTE} will be subsequently * removed from the test context, regardless of their values. * * @see TestExecutionListener#afterTestMethod(TestContext) */ public void afterTestMethod(TestContext testContext) throws Exception { if (Boolean.TRUE.equals(testContext.getAttribute(RESET_REQUEST_CONTEXT_HOLDER_ATTRIBUTE))) { if (logger.isDebugEnabled()) { logger.debug(String.format("Resetting RequestContextHolder for test context %s.", testContext)); } RequestContextHolder.resetRequestAttributes(); testContext.setAttribute(DependencyInjectionTestExecutionListener.REINJECT_DEPENDENCIES_ATTRIBUTE, Boolean.TRUE); } testContext.removeAttribute(POPULATED_REQUEST_CONTEXT_HOLDER_ATTRIBUTE); testContext.removeAttribute(RESET_REQUEST_CONTEXT_HOLDER_ATTRIBUTE); }
/** * Marks the {@link ApplicationContext application context} of the supplied {@link TestContext test context} as * {@link TestContext#markApplicationContextDirty() dirty}, and sets the * {@link DependencyInjectionTestExecutionListener#REINJECT_DEPENDENCIES_ATTRIBUTE REINJECT_DEPENDENCIES_ATTRIBUTE} * in the test context to <code>true</code> . */ protected void reloadContext(TestContext testContext) { testContext.markApplicationContextDirty(); testContext .setAttribute(DependencyInjectionTestExecutionListener.REINJECT_DEPENDENCIES_ATTRIBUTE, Boolean.TRUE); }