Spring Boot 自定义WebTestClient以添加默认标头

eufgjt7s  于 2023-04-20  发布在  Spring
关注(0)|答案(1)|浏览(121)

我在2.7.x版本中开发了一个Sping Boot 应用程序。对于集成测试,我试图自定义WebTestClient以添加默认头。
我已经尝试过了,但是请求中没有添加header:

@AutoConfigureWebTestClient
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class TestClass1{

    @Autowired
    private WebTestClient webTestClient;

    @Test
    public void test1() throws Exception {
        webTestClient.get()
                .uri("/foobar/")
                .exchange()
                .expectStatus().isOk()
                .expectBody(JsonArray.class);
   }
}

配置类:

@TestConfiguration
public class WebTestClientConfig {

    @Bean
    public WebTestClient client() {
        return WebTestClient.bindToServer()
                .responseTimeout(Duration.ofMinutes(2))
                .defaultHeader(API_KEY_HEADER, API_KEY_VALUE)
                .exchangeStrategies(ExchangeStrategies.withDefaults())
                .build();
    }
}

更新:

我还尝试在'WebTestClientConfig'类中使用WebTestClientBuilderCustomizer,并删除了'client()'方法,但问题仍然存在。请参阅以下示例:

@TestConfiguration
public class WebTestClientConfig {

    @Bean
    public WebTestClientBuilderCustomizer webTestClientBuilderCustomizer() {
        return (builder) -> builder.defaultHeader(API_KEY_HEADER, API_KEY_VALUE);
    }

}

有什么想法可以帮我实现目标吗?谢谢。

bq9c1y66

bq9c1y661#

在@samabcde的帮助下,我将代码更改为以下解决方案:
测试类别:

@AutoConfigureWebTestClient
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Import(WebTestClientConfig.class) // <---- !added!
public class TestClass1{

    @Autowired
    private WebTestClient webTestClient;

    @Test
    public void test1() throws Exception {
        webTestClient.get()
                .uri("/foobar/")
                .exchange()
                .expectStatus().isOk()
                .expectBody(JsonArray.class);
   }
}

配置类:

@TestConfiguration
public class WebTestClientConfig {

    @Bean
    public WebTestClientBuilderCustomizer webTestClientBuilderCustomizer() {
        return (builder) -> builder.defaultHeader(API_KEY_HEADER, API_KEY_VALUE);
    }

}

相关问题