| 
         此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.1.10!  | 
    
| 
         此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.1.10!  | 
    
Spring Framework 5.2 中引入的
实现自定义 .中的组件
test 可以监听 发布的以下事件,每个事件对应 API 中的一个方法。EventPublishingTestExecutionListenerTestExecutionListenerApplicationContextEventPublishingTestExecutionListenerTestExecutionListener
- 
BeforeTestClassEvent - 
PrepareTestInstanceEvent - 
BeforeTestMethodEvent - 
BeforeTestExecutionEvent - 
AfterTestExecutionEvent - 
AfterTestMethodEvent - 
AfterTestClassEvent 
这些事件可能由于各种原因而被使用,例如重置模拟 Bean 或跟踪
测试执行。使用测试执行事件而不是实现的一个优点
一个习惯是测试执行事件可以被任何
在测试中注册的春豆,并且此类豆类可能会受益
直接来自依赖注入和其他功能。在
相比之下,A 不是 中的 Bean。TestExecutionListenerApplicationContextApplicationContextTestExecutionListenerApplicationContext
| 
 默认情况下是注册的;但是,它只有
如果已加载,则发布事件。这样可以防止不必要或过早加载。 因此,在另一个 .例如,使用
注册的默认实现集 A 不会为使用
特定测试,但 A 将发布
同一测试套件中使用相同测试的任何后续测试类,因为上下文将在后续测试时加载
类将运行(只要上下文尚未从 via 或 max-size 逐出策略中删除)。 如果您希望确保始终为每个测试发布 a
类,则需要注册一个在回调中加载 的 ,并且必须在 . 同样,如果用于从
上下文缓存 在给定测试类中的最后一个测试方法之后,将不会为该测试类发布。  | 
为了侦听测试执行事件,Spring bean 可以选择实现接口。或者,侦听器
方法可以注释并配置为侦听
上面列出的特定事件类型(请参阅基于注释的事件侦听器)。
由于这种方法的流行,Spring 提供了以下专用注释来简化测试执行事件侦听器的注册。
这些注释驻留在包中。org.springframework.context.ApplicationListener@EventListener@EventListenerorg.springframework.test.context.event.annotation
- 
@BeforeTestClass - 
@PrepareTestInstance - 
@BeforeTestMethod - 
@BeforeTestExecution - 
@AfterTestExecution - 
@AfterTestMethod - 
@AfterTestClass 
| 
 默认情况下是注册的;但是,它只有
如果已加载,则发布事件。这样可以防止不必要或过早加载。 因此,在另一个 .例如,使用
注册的默认实现集 A 不会为使用
特定测试,但 A 将发布
同一测试套件中使用相同测试的任何后续测试类,因为上下文将在后续测试时加载
类将运行(只要上下文尚未从 via 或 max-size 逐出策略中删除)。 如果您希望确保始终为每个测试发布 a
类,则需要注册一个在回调中加载 的 ,并且必须在 . 同样,如果用于从
上下文缓存 在给定测试类中的最后一个测试方法之后,将不会为该测试类发布。  | 
异常处理
默认情况下,如果测试执行事件侦听器在使用
事件中,该异常将传播到正在使用的底层测试框架(例如
JUnit 或 TestNG)。例如,如果 a 的消耗导致
如果出现异常,则相应的测试方法将因异常而失败。在
相反,如果异步测试执行事件侦听器引发异常,则
异常不会传播到底层测试框架。有关
异步异常处理,请查阅类级 javadoc 了解 。BeforeTestMethodEvent@EventListener
异步侦听器
如果希望特定的测试执行事件侦听器异步处理事件,
您可以使用 Spring 的常规@Async支持。有关更多详细信息,请参阅类级 javadoc。@EventListener