Class TestContextManager
TestContextManager
is the main entry point into the Spring
TestContext Framework.
Specifically, a TestContextManager
is responsible for managing a
single TestContext
and signaling events to each registered
TestExecutionListener
at the following test execution points.
before test class execution
: prior to any before class callbacks of a particular testing framework — for example, JUnit Jupiter's@BeforeAll
test instance preparation
: immediately following instantiation of the test classbefore test setup
: prior to any before method callbacks of a particular testing framework — for example, JUnit Jupiter's@BeforeEach
before test execution
: immediately before execution of the test method but after test setupafter test execution
: immediately after execution of the test method but before test tear downafter test tear down
: after any after method callbacks of a particular testing framework — for example, JUnit Jupiter's@AfterEach
after test class execution
: after any after class callbacks of a particular testing framework — for example, JUnit Jupiter's@AfterAll
Support for loading and accessing
application contexts,
dependency injection of test instances,
transactional
execution of test methods, etc. is provided by
ContextLoaders
and TestExecutionListeners
,
which are configured via @ContextConfiguration
and
@TestExecutionListeners
, respectively.
Bootstrapping of the TestContext
, the default ContextLoader
,
default TestExecutionListeners
, and their collaborators is performed
by a TestContextBootstrapper
, which is configured via
@BootstrapWith
.
- Since:
- 2.5
- Author:
- Sam Brannen, Juergen Hoeller
- See Also:
-
Constructor Summary
ConstructorDescriptionTestContextManager
(Class<?> testClass) Construct a newTestContextManager
for the supplied test class.TestContextManager
(TestContextBootstrapper testContextBootstrapper) Construct a newTestContextManager
using the suppliedTestContextBootstrapper
and register the necessaryTestExecutionListeners
. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Hook for post-processing a test class after execution of all tests within the class.void
afterTestExecution
(Object testInstance, Method testMethod, Throwable exception) Hook for post-processing a test immediately after execution of the test method in the supplied test context — for example, for timing or logging purposes.void
afterTestMethod
(Object testInstance, Method testMethod, Throwable exception) Hook for post-processing a test after execution of after lifecycle callbacks of the underlying test framework — for example, tearing down test fixtures, ending a transaction, etc.void
Hook for pre-processing a test class before execution of any tests within the class.void
beforeTestExecution
(Object testInstance, Method testMethod) Hook for pre-processing a test immediately before execution of the test method in the supplied test context — for example, for timing or logging purposes.void
beforeTestMethod
(Object testInstance, Method testMethod) Hook for pre-processing a test before execution of before lifecycle callbacks of the underlying test framework — for example, setting up test fixtures, starting a transaction, etc.final TestContext
Get theTestContext
managed by thisTestContextManager
.final List<TestExecutionListener>
Get the currentTestExecutionListeners
registered for thisTestContextManager
.void
prepareTestInstance
(Object testInstance) Hook for preparing a test instance prior to execution of any individual test methods — for example, to inject dependencies.void
registerTestExecutionListeners
(List<TestExecutionListener> testExecutionListeners) Register the supplied list ofTestExecutionListeners
by appending them to the list of listeners used by thisTestContextManager
.void
registerTestExecutionListeners
(TestExecutionListener... testExecutionListeners) Register the supplied array ofTestExecutionListeners
by appending them to the list of listeners used by thisTestContextManager
.
-
Constructor Details
-
TestContextManager
Construct a newTestContextManager
for the supplied test class.Delegates to
TestContextManager(TestContextBootstrapper)
with theTestContextBootstrapper
configured for the test class. If the@BootstrapWith
annotation is present on the test class, either directly or as a meta-annotation, then itsvalue
will be used as the bootstrapper type; otherwise, theDefaultTestContextBootstrapper
will be used.- Parameters:
testClass
- the test class to be managed- See Also:
-
TestContextManager
Construct a newTestContextManager
using the suppliedTestContextBootstrapper
and register the necessaryTestExecutionListeners
.Delegates to the supplied
TestContextBootstrapper
for building theTestContext
and retrieving theTestExecutionListeners
.- Parameters:
testContextBootstrapper
- the bootstrapper to use- Since:
- 4.2
- See Also:
-
-
Method Details
-
getTestContext
Get theTestContext
managed by thisTestContextManager
. -
registerTestExecutionListeners
Register the supplied list ofTestExecutionListeners
by appending them to the list of listeners used by thisTestContextManager
. -
registerTestExecutionListeners
Register the supplied array ofTestExecutionListeners
by appending them to the list of listeners used by thisTestContextManager
. -
getTestExecutionListeners
Get the currentTestExecutionListeners
registered for thisTestContextManager
.Allows for modifications, for example, adding a listener to the beginning of the list. However, make sure to keep the list stable while actually executing tests.
-
beforeTestClass
Hook for pre-processing a test class before execution of any tests within the class. Should be called prior to any framework-specific before class methods — for example, methods annotated with JUnit Jupiter's@BeforeAll
.An attempt will be made to give each registered
TestExecutionListener
a chance to pre-process the test class execution. If a listener throws an exception, however, the remaining registered listeners will not be called.- Throws:
Exception
- if a registered TestExecutionListener throws an exception- Since:
- 3.0
- See Also:
-
prepareTestInstance
Hook for preparing a test instance prior to execution of any individual test methods — for example, to inject dependencies.This method should be called immediately after instantiation of the test class or as soon after instantiation as possible (as is the case with the
SpringMethodRule
). In any case, this method must be called prior to any framework-specific lifecycle callbacks.The managed
TestContext
will be updated with the suppliedtestInstance
.An attempt will be made to give each registered
TestExecutionListener
a chance to prepare the test instance. If a listener throws an exception, however, the remaining registered listeners will not be called.- Parameters:
testInstance
- the test instance to prepare- Throws:
Exception
- if a registered TestExecutionListener throws an exception- See Also:
-
beforeTestMethod
Hook for pre-processing a test before execution of before lifecycle callbacks of the underlying test framework — for example, setting up test fixtures, starting a transaction, etc.This method must be called immediately prior to framework-specific before lifecycle callbacks — for example, methods annotated with JUnit Jupiter's
@BeforeEach
. For historical reasons, this method is namedbeforeTestMethod
. Since the introduction ofbeforeTestExecution(java.lang.Object, java.lang.reflect.Method)
, a more suitable name for this method might be something likebeforeTestSetUp
orbeforeEach
; however, it is unfortunately impossible to rename this method due to backward compatibility concerns.The managed
TestContext
will be updated with the suppliedtestInstance
andtestMethod
.An attempt will be made to give each registered
TestExecutionListener
a chance to perform its pre-processing. If a listener throws an exception, however, the remaining registered listeners will not be called.- Parameters:
testInstance
- the current test instancetestMethod
- the test method which is about to be executed on the test instance- Throws:
Exception
- if a registered TestExecutionListener throws an exception- See Also:
-
beforeTestExecution
Hook for pre-processing a test immediately before execution of the test method in the supplied test context — for example, for timing or logging purposes.This method must be called after framework-specific before lifecycle callbacks — for example, methods annotated with JUnit Jupiter's
@BeforeEach
.The managed
TestContext
will be updated with the suppliedtestInstance
andtestMethod
.An attempt will be made to give each registered
TestExecutionListener
a chance to perform its pre-processing. If a listener throws an exception, however, the remaining registered listeners will not be called.- Parameters:
testInstance
- the current test instancetestMethod
- the test method which is about to be executed on the test instance- Throws:
Exception
- if a registered TestExecutionListener throws an exception- Since:
- 5.0
- See Also:
-
beforeTestMethod(java.lang.Object, java.lang.reflect.Method)
afterTestMethod(java.lang.Object, java.lang.reflect.Method, java.lang.Throwable)
beforeTestExecution(java.lang.Object, java.lang.reflect.Method)
afterTestExecution(java.lang.Object, java.lang.reflect.Method, java.lang.Throwable)
getTestExecutionListeners()
-
afterTestExecution
public void afterTestExecution(Object testInstance, Method testMethod, @Nullable Throwable exception) throws Exception Hook for post-processing a test immediately after execution of the test method in the supplied test context — for example, for timing or logging purposes.This method must be called before framework-specific after lifecycle callbacks — for example, methods annotated with JUnit Jupiter's
@AfterEach
.The managed
TestContext
will be updated with the suppliedtestInstance
,testMethod
, andexception
.Each registered
TestExecutionListener
will be given a chance to perform its post-processing. If a listener throws an exception, the remaining registered listeners will still be called. After all listeners have executed, the first caught exception will be rethrown with any subsequent exceptions suppressed in the first exception.Note that registered listeners will be executed in the opposite order in which they were registered.
- Parameters:
testInstance
- the current test instancetestMethod
- the test method which has just been executed on the test instanceexception
- the exception that was thrown during execution of the test method or by a TestExecutionListener, ornull
if none was thrown- Throws:
Exception
- if a registered TestExecutionListener throws an exception- Since:
- 5.0
- See Also:
-
afterTestMethod
public void afterTestMethod(Object testInstance, Method testMethod, @Nullable Throwable exception) throws Exception Hook for post-processing a test after execution of after lifecycle callbacks of the underlying test framework — for example, tearing down test fixtures, ending a transaction, etc.This method must be called immediately after framework-specific after lifecycle callbacks — for example, methods annotated with JUnit Jupiter's
@AfterEach
. For historical reasons, this method is namedafterTestMethod
. Since the introduction ofafterTestExecution(java.lang.Object, java.lang.reflect.Method, java.lang.Throwable)
, a more suitable name for this method might be something likeafterTestTearDown
orafterEach
; however, it is unfortunately impossible to rename this method due to backward compatibility concerns.The managed
TestContext
will be updated with the suppliedtestInstance
,testMethod
, andexception
.Each registered
TestExecutionListener
will be given a chance to perform its post-processing. If a listener throws an exception, the remaining registered listeners will still be called. After all listeners have executed, the first caught exception will be rethrown with any subsequent exceptions suppressed in the first exception.Note that registered listeners will be executed in the opposite
- Parameters:
testInstance
- the current test instancetestMethod
- the test method which has just been executed on the test instanceexception
- the exception that was thrown during execution of the test method or by a TestExecutionListener, ornull
if none was thrown- Throws:
Exception
- if a registered TestExecutionListener throws an exception- See Also:
-
afterTestClass
Hook for post-processing a test class after execution of all tests within the class. Should be called after any framework-specific after class methods — for example, methods annotated with JUnit Jupiter's@AfterAll
.Each registered
TestExecutionListener
will be given a chance to perform its post-processing. If a listener throws an exception, the remaining registered listeners will still be called. After all listeners have executed, the first caught exception will be rethrown with any subsequent exceptions suppressed in the first exception.Note that registered listeners will be executed in the opposite
- Throws:
Exception
- if a registered TestExecutionListener throws an exception- Since:
- 3.0
- See Also:
-