public class EventPublishingTestExecutionListener extends AbstractTestExecutionListener
TestExecutionListener
that publishes test execution events to the
ApplicationContext
for the currently executing test.
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.
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
.
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
.
@BeforeTestClass
,
@PrepareTestInstance
,
@BeforeTestMethod
,
@BeforeTestExecution
,
@AfterTestExecution
,
@AfterTestMethod
,
@AfterTestClass
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
Constructor and Description |
---|
EventPublishingTestExecutionListener() |
Modifier and Type | Method and Description |
---|---|
void |
afterTestClass(TestContext testContext)
|
void |
afterTestExecution(TestContext testContext)
|
void |
afterTestMethod(TestContext testContext)
|
void |
beforeTestClass(TestContext testContext)
|
void |
beforeTestExecution(TestContext testContext)
|
void |
beforeTestMethod(TestContext testContext)
|
int |
getOrder()
Returns
10000 . |
void |
prepareTestInstance(TestContext testContext)
|
public EventPublishingTestExecutionListener()
public final int getOrder()
10000
.getOrder
in interface Ordered
getOrder
in class AbstractTestExecutionListener
Ordered.HIGHEST_PRECEDENCE
,
Ordered.LOWEST_PRECEDENCE
public void beforeTestClass(TestContext testContext)
beforeTestClass
in interface TestExecutionListener
beforeTestClass
in class AbstractTestExecutionListener
testContext
- the test context for the test; never null
public void prepareTestInstance(TestContext testContext)
prepareTestInstance
in interface TestExecutionListener
prepareTestInstance
in class AbstractTestExecutionListener
testContext
- the test context for the test; never null
public void beforeTestMethod(TestContext testContext)
beforeTestMethod
in interface TestExecutionListener
beforeTestMethod
in class AbstractTestExecutionListener
testContext
- the test context in which the test method will be
executed; never null
TestExecutionListener.afterTestMethod(org.springframework.test.context.TestContext)
,
TestExecutionListener.beforeTestExecution(org.springframework.test.context.TestContext)
,
TestExecutionListener.afterTestExecution(org.springframework.test.context.TestContext)
public void beforeTestExecution(TestContext testContext)
beforeTestExecution
in interface TestExecutionListener
beforeTestExecution
in class AbstractTestExecutionListener
testContext
- the test context in which the test method will be
executed; never null
TestExecutionListener.beforeTestMethod(org.springframework.test.context.TestContext)
,
TestExecutionListener.afterTestMethod(org.springframework.test.context.TestContext)
,
TestExecutionListener.afterTestExecution(org.springframework.test.context.TestContext)
public void afterTestExecution(TestContext testContext)
afterTestExecution
in interface TestExecutionListener
afterTestExecution
in class AbstractTestExecutionListener
testContext
- the test context in which the test method will be
executed; never null
TestExecutionListener.beforeTestMethod(org.springframework.test.context.TestContext)
,
TestExecutionListener.afterTestMethod(org.springframework.test.context.TestContext)
,
TestExecutionListener.beforeTestExecution(org.springframework.test.context.TestContext)
public void afterTestMethod(TestContext testContext)
afterTestMethod
in interface TestExecutionListener
afterTestMethod
in class AbstractTestExecutionListener
testContext
- the test context in which the test method was
executed; never null
TestExecutionListener.beforeTestMethod(org.springframework.test.context.TestContext)
,
TestExecutionListener.beforeTestExecution(org.springframework.test.context.TestContext)
,
TestExecutionListener.afterTestExecution(org.springframework.test.context.TestContext)
public void afterTestClass(TestContext testContext)
afterTestClass
in interface TestExecutionListener
afterTestClass
in class AbstractTestExecutionListener
testContext
- the test context for the test; never null