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/