Class SpringMethodRule

java.lang.Object
org.springframework.test.context.junit4.rules.SpringMethodRule
All Implemented Interfaces:
MethodRule

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 {

    @ClassRule
    public static final SpringClassRule springClassRule = new SpringClassRule();

    @Rule
    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: 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.

Since:
4.2
Author:
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
      Parameters:
      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
      Returns:
      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)