Class EventPublishingTestExecutionListener
- All Implemented Interfaces:
Ordered
,TestExecutionListener
TestExecutionListener
that publishes test execution events to the
ApplicationContext
for the currently executing test.
Supported Events
BeforeTestClassEvent
PrepareTestInstanceEvent
BeforeTestMethodEvent
BeforeTestExecutionEvent
AfterTestExecutionEvent
AfterTestMethodEvent
AfterTestClassEvent
These events may be consumed for various reasons, such as resetting mock
beans or tracing test execution. One advantage of consuming test events rather
than implementing a custom TestExecutionListener
is that test events may be consumed by any Spring bean
registered in the test ApplicationContext
, and such beans may benefit
directly from dependency injection and other features of the ApplicationContext
.
In contrast, a TestExecutionListener
is not a bean in the ApplicationContext
.
Note that the EventPublishingTestExecutionListener
is registered by
default; however, it only publishes events if the ApplicationContext
has already been loaded. This
prevents the ApplicationContext
from being loaded unnecessarily or too
early. Consequently, a BeforeTestClassEvent
will not be published until
after the ApplicationContext
has been loaded by another
TestExecutionListener
. For example, with the default set of
TestExecutionListeners
registered, a BeforeTestClassEvent
will
not be published for the first test class that uses a particular test
ApplicationContext
, but a BeforeTestClassEvent
will be published
for any subsequent test class in the same test suite that uses the same test
ApplicationContext
since the context will already have been loaded
when subsequent test classes run (as long as the context has not been removed
from the ContextCache
via @DirtiesContext
or the max-size eviction policy). If you wish to ensure that a
BeforeTestClassEvent
is published for every test class, you need to
register a TestExecutionListener
that loads the ApplicationContext
in the beforeTestClass
callback, and that TestExecutionListener
must be registered
before the EventPublishingTestExecutionListener
. Similarly, if
@DirtiesContext
is used to remove the ApplicationContext
from
the context cache after the last test method in a given test class, the
AfterTestClassEvent
will not be published for that test class.
Exception Handling
By default, if a test event listener throws an exception while consuming
a test event, that exception will propagate to the underlying testing framework
in use. For example, if the consumption of a BeforeTestMethodEvent
results in an exception, the corresponding test method will fail as a result
of the exception. In contrast, if an asynchronous test event listener throws
an exception, the exception will not propagate to the underlying testing framework.
For further details on asynchronous exception handling, consult the class-level
Javadoc for @EventListener
.
Asynchronous Listeners
If you want a particular test event listener to process events asynchronously,
you can use Spring's @Async
support. For further details, consult the class-level Javadoc for
@EventListener
.
- Since:
- 5.2
- Author:
- Sam Brannen, Frank Scheffler
- See Also:
-
Field Summary
Fields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
afterTestClass
(TestContext testContext) void
afterTestExecution
(TestContext testContext) void
afterTestMethod
(TestContext testContext) void
beforeTestClass
(TestContext testContext) void
beforeTestExecution
(TestContext testContext) void
beforeTestMethod
(TestContext testContext) final int
getOrder()
Returns10000
.void
prepareTestInstance
(TestContext testContext)
-
Constructor Details
-
EventPublishingTestExecutionListener
public EventPublishingTestExecutionListener()
-
-
Method Details
-
getOrder
public final int getOrder()Returns10000
.- Specified by:
getOrder
in interfaceOrdered
- Overrides:
getOrder
in classAbstractTestExecutionListener
- Returns:
- the order value
- See Also:
-
beforeTestClass
- Specified by:
beforeTestClass
in interfaceTestExecutionListener
- Overrides:
beforeTestClass
in classAbstractTestExecutionListener
- Parameters:
testContext
- the test context for the test; nevernull
-
prepareTestInstance
- Specified by:
prepareTestInstance
in interfaceTestExecutionListener
- Overrides:
prepareTestInstance
in classAbstractTestExecutionListener
- Parameters:
testContext
- the test context for the test; nevernull
-
beforeTestMethod
- Specified by:
beforeTestMethod
in interfaceTestExecutionListener
- Overrides:
beforeTestMethod
in classAbstractTestExecutionListener
- Parameters:
testContext
- the test context in which the test method will be executed; nevernull
- See Also:
-
beforeTestExecution
- Specified by:
beforeTestExecution
in interfaceTestExecutionListener
- Overrides:
beforeTestExecution
in classAbstractTestExecutionListener
- Parameters:
testContext
- the test context in which the test method will be executed; nevernull
- See Also:
-
afterTestExecution
- Specified by:
afterTestExecution
in interfaceTestExecutionListener
- Overrides:
afterTestExecution
in classAbstractTestExecutionListener
- Parameters:
testContext
- the test context in which the test method will be executed; nevernull
- See Also:
-
afterTestMethod
- Specified by:
afterTestMethod
in interfaceTestExecutionListener
- Overrides:
afterTestMethod
in classAbstractTestExecutionListener
- Parameters:
testContext
- the test context in which the test method was executed; nevernull
- See Also:
-
afterTestClass
- Specified by:
afterTestClass
in interfaceTestExecutionListener
- Overrides:
afterTestClass
in classAbstractTestExecutionListener
- Parameters:
testContext
- the test context for the test; nevernull
-