Class SpringMethodRule
- All Implemented Interfaces:
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 Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionapply(Statement base, FrameworkMethod frameworkMethod, Object testInstance) Apply instance-level and method-level features of the Spring TestContext Framework to the suppliedbasestatement.
-
Constructor Details
-
SpringMethodRule
public SpringMethodRule()
-
-
Method Details
-
apply
Apply instance-level and method-level features of the Spring TestContext Framework to the suppliedbasestatement.Specifically, this method invokes the
prepareTestInstance(),beforeTestMethod(), andafterTestMethod()methods on theTestContextManager, 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
@IfProfileValueannotation from running altogether, even skipping the execution ofprepareTestInstance()methods inTestExecutionListeners.- Specified by:
applyin interfaceMethodRule- Parameters:
base- the baseStatementthat this rule should be applied toframeworkMethod- the method which is about to be invoked on the test instancetestInstance- the current test instance- Returns:
- a statement that wraps the supplied
basewith 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)
-