对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-doc.cn

测试执行事件

Spring Framework 5.2 中引入的提供了一个 实现自定义 .组件 test 可以侦听 发布的以下事件,每个事件对应于 API 中的一个方法。EventPublishingTestExecutionListenerTestExecutionListenerApplicationContextEventPublishingTestExecutionListenerTestExecutionListenerspring-doc.cn

这些事件可能由于各种原因而被使用,例如重置 mock bean 或跟踪 测试执行。使用测试执行事件而不是实现 自定义是测试执行事件可以被任何 Spring bean 在 test 中注册,这样的 bean 可能会受益 直接从依赖项注入和 .在 相反,a 不是 中的 bean。TestExecutionListenerApplicationContextApplicationContextTestExecutionListenerApplicationContextspring-doc.cn

默认情况下已注册;但是,它只是 如果已加载,则发布事件。这可以防止 不必要地加载或过早加载。EventPublishingTestExecutionListenerApplicationContextApplicationContextspring-doc.cn

因此, a 只有在 被另一个 加载后才会发布 。例如,使用 注册的默认实现集 a 将不会为使用 特定测试 ,但发布 同一测试套件中使用同一测试的任何后续测试类,因为在后续测试时,上下文已经加载 类运行(只要上下文尚未从 via 或 max-size 驱逐策略中删除)。BeforeTestClassEventApplicationContextTestExecutionListenerTestExecutionListenerBeforeTestClassEventApplicationContextBeforeTestClassEventApplicationContextContextCache@DirtiesContextspring-doc.cn

如果您希望确保始终为每个测试发布 a 类中,您需要注册一个在回调中加载 的 a,并且必须 .BeforeTestClassEventTestExecutionListenerApplicationContextbeforeTestClassTestExecutionListenerEventPublishingTestExecutionListenerspring-doc.cn

同样,if 用于从 Context Cache 在给定测试类中的最后一个测试方法之后,则不会为该测试类发布 。@DirtiesContextApplicationContextAfterTestClassEventspring-doc.cn

为了侦听测试执行事件,Spring bean 可以选择实现接口。或者,侦听器 方法可以注释并配置为侦听 上面列出的特定事件类型(请参阅基于 Comments 的事件侦听器)。 由于这种方法的流行, Spring 提供了以下专用 Comments 来简化测试执行事件侦听器的注册。 这些注释驻留在包中。org.springframework.context.ApplicationListener@EventListener@EventListenerorg.springframework.test.context.event.annotationspring-doc.cn

异常处理

默认情况下,如果测试执行事件侦听器在使用 事件,该异常将传播到正在使用的底层测试框架(例如 JUnit 或 TestNG)。例如,如果 a 的消耗导致 异常,则相应的测试方法将因异常而失败。在 相反,如果异步测试执行事件侦听器引发异常,则 exception 不会传播到底层测试框架。有关更多详细信息 异步异常处理,请参阅类级 Javadoc 以获取 。BeforeTestMethodEvent@EventListenerspring-doc.cn

异步侦听器

如果您希望特定的测试执行事件侦听器异步处理事件, 您可以使用 Spring 的常规 @Async support 。有关更多详细信息,请查阅类级 javadoc 以获取 。@EventListenerspring-doc.cn