java - JUnit 5 : Inject spring components to Extension (BeforeAllCallback/AfterAllCallback)

标签 java spring-boot junit junit5

tl;dr:在所有测试运行之前,如何将自定义数据提供程序实例化为 Spring 组件?

有没有一种聪明的方法可以将 Spring 组件注入(inject)到实现 BeforeAllCallback 的自定义 JUnit Jupiter 扩展中? beforeAll 方法应该在使用 @ExtendWith(OncePerTestRunExtension.class) 执行 MyTestClass 之前触发一个复杂的过程。

我创建了一个 Spring Boot 应用程序 (src/main/java),为我的测试 (src/test/java) 提供必要的数据。准备测试数据可能需要几个小时。它还使我能够对一些休息端点进行抽象访问。

数据在所有测试类的处理之间不会发生变化。所以我只想拉一次数据。

在一个类中编写所有测试是可行的,但我认为分成不同的类可以提供更好的概述。

最佳答案

beforeAll(ExtensionContext)您定制的方法BeforeAllCallback ,您可以访问Spring ApplicationContext对于当前测试类,通过 SpringExtension.getApplicationContext(extensionContext) .

如果您将自定义数据提供程序配置为 ApplicationContext 中的 Spring 组件,然后您可以从 ApplicationContext 检索组件在您的扩展中 - 例如,通过 applicationContext.getBean(MyDataProvider.class) .

如果您需要处理数据并在测试之间存储处理后的数据,您可以将其存储在 ExtensionContext.Store在 JUnit Jupiter 中。请参阅ExtensionContext.getRoot()getOrComputeIfAbsent(...) ExtensionContext.Store 中的变体了解详情。

关于java - JUnit 5 : Inject spring components to Extension (BeforeAllCallback/AfterAllCallback),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56904620/

相关文章:

java - 如何正确找到Java-8中的流特征?

java - 如何将包含反斜杠 (\) 的用户名传递给 jcifs smb?

spring-boot - Spring Boot 2.4.2 和 Thymeleaf 3.0.12 - 访问静态方法

web-applications - 输出 jar 中没有 webapp 文件夹

java - Spring Boot 在 Debug模式下阻止 H2 控制台

spring - 测试 Spring 存储库

junit - 我们什么时候应该使用 Mockery 和 JUnit4Mockery?

java - 具有规范、分页和标准获取连接的 Spring Data JPA 存储库

testing - 如何显示一个充满junit测试结果文件的目录

Windows XP 中的 Java AWT native 框架颜色不正确