Search in sources :

Example 1 with MethodMode

use of org.springframework.test.annotation.DirtiesContext.MethodMode in project spring-framework by spring-projects.

the class AbstractDirtiesContextTestExecutionListener method beforeOrAfterTestMethod.

/**
	 * Perform the actual work for {@link #beforeTestMethod} and {@link #afterTestMethod}
	 * by dirtying the context if appropriate (i.e., according to the required modes).
	 * @param testContext the test context whose application context should
	 * potentially be marked as dirty; never {@code null}
	 * @param requiredMethodMode the method mode required for a context to
	 * be marked dirty in the current phase; never {@code null}
	 * @param requiredClassMode the class mode required for a context to
	 * be marked dirty in the current phase; never {@code null}
	 * @throws Exception allows any exception to propagate
	 * @since 4.2
	 * @see #dirtyContext
	 */
protected void beforeOrAfterTestMethod(TestContext testContext, MethodMode requiredMethodMode, ClassMode requiredClassMode) throws Exception {
    Assert.notNull(testContext, "TestContext must not be null");
    Assert.notNull(requiredMethodMode, "requiredMethodMode must not be null");
    Assert.notNull(requiredClassMode, "requiredClassMode must not be null");
    Class<?> testClass = testContext.getTestClass();
    Method testMethod = testContext.getTestMethod();
    Assert.notNull(testClass, "The test class of the supplied TestContext must not be null");
    Assert.notNull(testMethod, "The test method of the supplied TestContext must not be null");
    DirtiesContext methodAnn = AnnotatedElementUtils.findMergedAnnotation(testMethod, DirtiesContext.class);
    DirtiesContext classAnn = AnnotatedElementUtils.findMergedAnnotation(testClass, DirtiesContext.class);
    boolean methodAnnotated = (methodAnn != null);
    boolean classAnnotated = (classAnn != null);
    MethodMode methodMode = (methodAnnotated ? methodAnn.methodMode() : null);
    ClassMode classMode = (classAnnotated ? classAnn.classMode() : null);
    if (logger.isDebugEnabled()) {
        String phase = (requiredClassMode.name().startsWith("BEFORE") ? "Before" : "After");
        logger.debug(String.format("%s test method: context %s, class annotated with @DirtiesContext [%s] " + "with mode [%s], method annotated with @DirtiesContext [%s] with mode [%s].", phase, testContext, classAnnotated, classMode, methodAnnotated, methodMode));
    }
    if ((methodMode == requiredMethodMode) || (classMode == requiredClassMode)) {
        HierarchyMode hierarchyMode = (methodAnnotated ? methodAnn.hierarchyMode() : classAnn.hierarchyMode());
        dirtyContext(testContext, hierarchyMode);
    }
}
Also used : HierarchyMode(org.springframework.test.annotation.DirtiesContext.HierarchyMode) ClassMode(org.springframework.test.annotation.DirtiesContext.ClassMode) MethodMode(org.springframework.test.annotation.DirtiesContext.MethodMode) DirtiesContext(org.springframework.test.annotation.DirtiesContext) Method(java.lang.reflect.Method)

Aggregations

Method (java.lang.reflect.Method)1 DirtiesContext (org.springframework.test.annotation.DirtiesContext)1 ClassMode (org.springframework.test.annotation.DirtiesContext.ClassMode)1 HierarchyMode (org.springframework.test.annotation.DirtiesContext.HierarchyMode)1 MethodMode (org.springframework.test.annotation.DirtiesContext.MethodMode)1