spring 在WebClient的单元测试中填充上下文

eivnm1vs  于 2023-02-28  发布在  Spring
关注(0)|答案(1)|浏览(131)

我添加了一个WebClientCustomizer,它从上下文视图中获取一个值,该值将作为输出请求的头添加。

@Override
public void customize(WebClient.Builder builder) {
    builder
        .filter((request, next) ->
                Mono.deferContextual(contextView ->
                    next.exchange(from(request)
                        .header("myHeader", contextView.getOrDefault("id", UUID.randomUUID().toString())).build()
                    )
        ));
}

我想为此创建一个测试,其中contextView包含一个预定义的值。我可以使用MockWebServer接收请求,然后从中读取头部。但问题是,如何在测试中填充reactor上下文?

odopli94

odopli941#

您可以使用几种方法来验证此逻辑。
1.通过显式提供上下文来单独测试WebClient

@Test
void test() {
    request() // webclient call
      .contextWrite(context -> context.put("id", "00000"))
      .as(StepVerifier::create)
      .assertNext(res -> {
        // assert results
      })
      .verifyComplete();
}

1.此外,您可以使用WebTestClient通过向控制器发送请求来验证流e2e。

相关问题