Ste*_*e K 8 java spring spring-boot junit5
在运行任何测试之前,我使用 Junit 5 扩展来启动 Wiremock 服务器。然而,Spring 上下文中的一个 bean 在其初始化过程中进行了远程调用,我无法更改该调用,并且该调用会导致 ConnectionException,因为 Wiremock 服务器尚未启动。
如何配置 JUnit 5 测试以在之前获得回调以在Spring 加载文本上下文
我的 JUnit 5 扩展如下所示:
public class MyWiremockExtension implements BeforeAllCallback, AfterAllCallback {
private final WireMockServer wireMock = new WireMockServer(...);
@Override
public void beforeAll(ExtensionContext extensionContext) throws Exception {
wireMock.start();
}
@Override
public void afterAll(ExtensionContext extensionContext) throws Exception {
wireMock.stop();
}
}
Run Code Online (Sandbox Code Playgroud)
Spring Bean 配置深埋在我的 OkHttpClient bean 所依赖的上游代码中,但它看起来像这样:
@Configuration
public class OkHttpClientConfiguration {
@Bean
OkHttpClient okHttpClient(...) {
OkHttpClient okHttpClient = new OkHttpClient.Builder()...build();
// wrap the okHttpClient in OAuth handling code which eagerly fetches a token
}
}
Run Code Online (Sandbox Code Playgroud)
我的测试如下所示:
@SpringBootTest(properties = {...})
@ExtendWith(MyWiremockExtension.class)
class MyTest {
...
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我找到的最接近的答案是How to register Spring Context Events for current test ApplicationContext at runtime ,但在测试上下文加载之前没有提供回调方法。
我对如何做到这一点的最佳猜测是:
ContextCustomizerFactory,或者SpringBootTestContextBootstrapper覆盖以启动wiremock ,然后是我的类而不是Spring Boot的类,尽管我不确定我会使用哪个回调来停止wiremock服务器。buildTestContext()super.buildTestContext()@BootstrapWith在类似的情况下对我有用的是:
创建自己的注释并指定扩展名
@Inherited
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@ExtendWith(
{
MyWiremockExtension.class,
SpringExtension.class,
}
)
public @interface WireMockSpringTest {
Run Code Online (Sandbox Code Playgroud)
这保留了我的情况的顺序
| 归档时间: |
|
| 查看次数: |
1823 次 |
| 最近记录: |