Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SpringExtension之前执行扩展_Spring_Docker_Integration Testing_Junit5_Junit5 Extension Model - Fatal编程技术网

在SpringExtension之前执行扩展

在SpringExtension之前执行扩展,spring,docker,integration-testing,junit5,junit5-extension-model,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{ .

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

@ExtendWith(value={MyDockerExtension.class})
@ExtendWith(value={SpringExtension.class})
@WebAppConfiguration
@ContextConfiguration(classes={...})
@TestInstance(TestInstance.LifeCycle.PER_CLASS)
public class TestClass{ ... }
在整个SpringExtension开始工作并使用Configurationc类生成整个上下文之前,有没有办法让MyDockerExtension执行一些代码


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

起初我对订单是否已修复表示怀疑,但:

通过
@ExtendWith
声明注册的扩展将按照它们在源代码中声明的顺序执行


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

作为
SpringExtension
的作者,我可以确认@Nicolai是正确的。执行依赖项注入时,首先(通常)加载
ApplicationContext
,该依赖项注入通过
TestInstancePostProcessor
扩展API触发。由于您使用的是
PER_CLASS
测试实例生命周期语义,因此
BeforeAllCallback
扩展API将在
TestInstancePostProcessor
之后调用。如果您使用的是
peru方法
lifecycle,则情况正好相反。