public class SpringMethodRule extends java.lang.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
.
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
does not support the
beforeTestExecution()
and afterTestExecution()
callbacks of the
TestExecutionListener
API.
apply(Statement, FrameworkMethod, Object)
,
SpringClassRule
,
TestContextManager
,
SpringJUnit4ClassRunner
Constructor and Description |
---|
SpringMethodRule() |
Modifier and Type | Method and Description |
---|---|
Statement |
apply(Statement base,
FrameworkMethod frameworkMethod,
java.lang.Object testInstance)
Apply instance-level and method-level features of
the Spring TestContext Framework to the supplied
base
statement. |
public Statement apply(Statement base, FrameworkMethod frameworkMethod, java.lang.Object testInstance)
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
.
apply
in interface MethodRule
base
- the base Statement
that this rule should be applied toframeworkMethod
- the method which is about to be invoked on the test instancetestInstance
- the current test instancebase
with instance-level
and method-level features of the Spring TestContext FrameworkwithBeforeTestMethodCallbacks(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)