spring - 在 SpringExtension 之前执行扩展

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

最佳答案

起初我对订单被修复持怀疑态度,但是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/

相关文章:

java - 使用表单创建一个简单的 Spring 应用程序

javascript - 使用 webpack-dev-server 启动时,Docker 容器未按预期发布端口

eclipse - Eclipse 功能集成测试的最佳实践

java - 集成测试对单元测试的依赖性 : A Nice/Deadly Unimplementable Strategy for Building JUnit Integration Tests?

java - Mule 没有使用 Spring 找到属性文件

java - 使用 Spring SimpleJpaRepository 出现泛型错误 "bound dismatch"

java - 关闭 ApplicationContext(在使用后)总是一个好主意吗?

docker - 如何在 Docker 容器中设置 Core 文件大小?

macos - OSX boot2docker无法连接到docker守护程序

c# - In-Memory HttpServer 如何知道要托管哪个 WebAPI 项目?