我正在尝试在我的应用程序中实现集成测试并拥有这样的测试类:
@ExtendWith(value={MyDockerExtension.class})
@ExtendWith(value={SpringExtension.class})
@WebAppConfiguration
@ContextConfiguration(classes={...})
@TestInstance(TestInstance.LifeCycle.PER_CLASS)
public class TestClass{ ... }
在整个 SpringExtension 开始工作并使用 Configurationc 类生成整个 Context 之前,有没有办法让 MyDockerExtension 执行一些代码?
我听说我们声明扩展的顺序是关键,但遗憾的是,实现 BeforeAllCallback, AfterAllCallback
的 MyDockerExtension 在测试方法之前和整个上下文加载之后执行。在那种情况下,使用 docker 启动容器为时已晚,因为整个上下文已加载,我的应用程序已经尝试连接到容器。
最佳答案
起初我对订单被修复持怀疑态度,但是you're correct :
Extensions registered declaratively via
@ExtendWith
will be executed in the order in which they are declared in the source code.
关于 MyDockerExtension
,您可能需要查看扩展点 TestInstancePostProcessor
,在 @BeforeAll
之前调用。 SpringExtension
implements it我想它就是在那里设置应用程序上下文的。如果您也实现它,您应该能够在它实现之前采取行动。
关于spring - 在 SpringExtension 之前执行扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51554973/