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: 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.
- Since:
- 4.2
- Author:
- Sam Brannen, Philippe Marschall
- See Also:
-
Constructor Summary
-
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 suppliedbase
statement.
-
Constructor Details
-
SpringMethodRule
public SpringMethodRule()
-
-
Method Details
-
apply
Apply instance-level and method-level features of the Spring TestContext Framework to the suppliedbase
statement.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
@IfProfileValue
annotation from running altogether, even skipping the execution ofprepareTestInstance()
methods inTestExecutionListeners
.- Specified by:
apply
in interfaceMethodRule
- Parameters:
base
- the baseStatement
that 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
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)
-