首页 > 解决方案 > 在 SpringExtension 之前执行扩展

问题描述

我正在尝试在我的应用程序中实现集成测试并拥有这样的测试类:

@ExtendWith(value={MyDockerExtension.class})
@ExtendWith(value={SpringExtension.class})
@WebAppConfiguration
@ContextConfiguration(classes={...})
@TestInstance(TestInstance.LifeCycle.PER_CLASS)
public class TestClass{ ... }

在整个 SpringExtension 开始工作并使用 Configurationc 类生成整个 Context 之前,有什么方法可以让 MyDockerExtension 执行一些代码?

我听说我们声明扩展的顺序是关键,但遗憾的是,实现的 MyDockerExtensionBeforeAllCallback, AfterAllCallback在测试方法之前和加载整个上下文之后执行。在这种情况下,使用 docker 启动容器为时已晚,因为由于加载了整个上下文,我的应用程序已经尝试连接到容器。

标签: springdockerintegration-testingjunit5junit5-extension-model

解决方案


起初我对修复的订单持怀疑态度,但你是对的:

以声明方式注册的扩展@ExtendWith将按照它们在源代码中声明的顺序执行。

关于MyDockerExtension,您可能需要查看TestInstancePostProcessor之前调用的扩展点@BeforeAllSpringExtension实现它,我猜它在那里设置应用程序上下文。如果你也实现了它,你应该能够在它之前采取行动。


推荐阅读