Class SpringMethodRule

All Implemented Interfaces:

public class SpringMethodRule extends Object implements MethodRule
SpringMethodRule is a custom JUnit 4 MethodRule that supports instance-level and method-level features of the Spring TestContext Framework in standard JUnit tests by means of the TestContextManager and associated support classes and annotations.

In contrast to the SpringJUnit4ClassRunner, Spring's rule-based JUnit support has the advantage that it is independent of any Runner and can therefore be combined with existing alternative runners like JUnit's Parameterized or third-party runners such as the MockitoJUnitRunner.

In order to achieve the same functionality as the SpringJUnit4ClassRunner, however, a SpringMethodRule must be combined with a SpringClassRule, since SpringMethodRule only supports the instance-level and method-level features of the SpringJUnit4ClassRunner.

Example Usage

 public class ExampleSpringIntegrationTest {

    public static final SpringClassRule springClassRule = new SpringClassRule();

    public final SpringMethodRule springMethodRule = new SpringMethodRule();

    // ...

The following list constitutes all annotations currently supported directly or indirectly by SpringMethodRule. (Note that additional annotations may be supported by various TestExecutionListener or TestContextBootstrapper implementations.)

NOTE: As of Spring Framework 4.3, this class requires JUnit 4.12 or higher.

WARNING: Due to the shortcomings of JUnit rules, the SpringMethodRule prepares the test instance before @Before lifecycle methods instead of immediately after instantiation of the test class. In addition, the SpringMethodRule does not support the beforeTestExecution() and afterTestExecution() callbacks of the TestExecutionListener API.

Sam Brannen, Philippe Marschall
See Also:
  • Constructor Details

    • SpringMethodRule

      public SpringMethodRule()
  • Method Details

    • apply

      public Statement apply(Statement base, FrameworkMethod frameworkMethod, Object testInstance)
      Apply instance-level and method-level features of the Spring TestContext Framework to the supplied base statement.

      Specifically, this method invokes the prepareTestInstance(), beforeTestMethod(), and afterTestMethod() methods on the TestContextManager, potentially with Spring timeouts and repetitions.

      In addition, this method checks whether the test is enabled in the current execution environment. This prevents methods with a non-matching @IfProfileValue annotation from running altogether, even skipping the execution of prepareTestInstance() methods in TestExecutionListeners.

      Specified by:
      apply in interface MethodRule
      base - the base Statement that this rule should be applied to
      frameworkMethod - the method which is about to be invoked on the test instance
      testInstance - the current test instance
      a statement that wraps the supplied base with instance-level and method-level features of the Spring TestContext Framework
      See Also:
      • withBeforeTestMethodCallbacks(org.junit.runners.model.Statement, java.lang.reflect.Method, java.lang.Object, org.springframework.test.context.TestContextManager)
      • withAfterTestMethodCallbacks(org.junit.runners.model.Statement, java.lang.reflect.Method, java.lang.Object, org.springframework.test.context.TestContextManager)
      • withPotentialRepeat(org.junit.runners.model.Statement, java.lang.reflect.Method, java.lang.Object)
      • withPotentialTimeout(org.junit.runners.model.Statement, java.lang.reflect.Method, java.lang.Object)
      • withTestInstancePreparation(org.junit.runners.model.Statement, java.lang.Object, org.springframework.test.context.TestContextManager)
      • withProfileValueCheck(org.junit.runners.model.Statement, java.lang.reflect.Method, java.lang.Object)