在SpringExtension之前执行扩展

时间:2018-07-27 09:32:46

标签: spring docker integration-testing junit5 junit5-extension-model

我正在尝试在我的应用中实施集成测试,并具有这样的测试类:

@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启动容器已经太晚了,因为由于整个上下文已加载,我的应用程序已经尝试连接到容器。

1 个答案:

答案 0 :(得分:1)

起初,我对订单是否固定表示怀疑,但you're correct

  

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

关于MyDockerExtension,您可能想看一下扩展点TestInstancePostProcessor,它在@BeforeAll之前被调用。 SpringExtension implements it,我猜它在那里设置了应用程序上下文。如果您还实施它,那么您应该能够先采取行动。